2016-08-25 7 views
2

Я пытаюсь создать гистограмму, которая показывает 95% доверительные интервалы для каждой группы. Очевидно, что, поскольку они составляют 95% доверительных интервалов, они асимметричны. Тем не менее, проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как сделать каждый 95% CI-бар различным для каждой группы (т. Е. Для каждого бара), поскольку, очевидно, они разные для каждого.гистограмма диаграммы matplotlib с различными барами ошибок для каждого бара

Мой код выглядит следующим образом:

meanPassivePSE = np.mean(PSE_PASSIVE) 
stdPassivePSE = np.std(PSE_PASSIVE) 
meanActivePSE= np.mean(PSE_ACTIVE_HUMAN) 
stdActivePSE = np.std(PSE_ACTIVE_HUMAN) 
meanRoboticPSE=np.mean(PSE_ACTIVE_ROBOT) 
stdRoboticPSE = np.std(PSE_ACTIVE_ROBOT) 


#95%conf intervals 

confInterval95Passive = stats.norm.interval(0.95, loc=meanPassivePSE, scale=stdPassivePSE/np.sqrt(len(PSE_PASSIVE))) 
confInterval95Active = stats.norm.interval(0.95, loc=meanActivePSE, scale=stdActivePSE/np.sqrt(len(PSE_ACTIVE_HUMAN))) 
confInterval95Robot = stats.norm.interval(0.95, loc=meanRoboticPSE, scale=stdRoboticPSE/np.sqrt(len(PSE_ACTIVE_ROBOT))) 


conditions = 'Passive', 'Active Human', 'Active Robot' 
yPos = np.arange(len(conditions)) 
PSE = [meanPassivePSE, meanActivePSE, meanRoboticPSE] 


plt.bar(yPos, PSE, align='center', alpha=0.5, color=('g','b','r'), yerr = (????)) 
#plt.errorbar(confInterval95Passive[0], confInterval95Passive[1]) 

plt.xticks(yPos,conditions) 
plt.ylabel('Point of Subject Equality (ms)') 
plt.title('Average Point of Subjective Equality in each Condition') 
plt.show() 

Так, например:

`confInterval95Passive[0],confInterval95Passive[1] = 2.71596442574 4.13221200188` 

Но для каждой из трех групп (пассивные, активные и роботизированных) эти статистики различны. Итак, как мне сделать, чтобы на гистограмме было три разных бара, с тремя разными и асимметричными барами ошибок? Я предполагаю, что это должно быть рассмотрено в аргументе «yerr =»?

Спасибо за помощь!

ответ

0

Я решил проблему так:

yerrs = [[meanPassivePSE-confInterval95Passive[0], confInterval95Active-confInterval95Active[0], confInterval95Robot-confInterval95Robot[0]], 
[[confInterval95Passive[1]-meanPassivePSE, confInterval95Active[1]-confInterval95Active, confInterval95Robot[1]-confInterval95Robot]] 
  • ax.errorbars использует значения для добавления/вычитания из средних значений
  • Поэтому вычисленные доверительные интервалы должны быть нормированным средними стоимостей
  • Позже ax.errorbars добавляет/вычитает эти значения снова.

Теперь параметр может быть введен в строке() - метод

plt.bar(yPos, PSE, align='center', alpha=0.5, color=('g','b','r'), yerr = yerrs) 
Смежные вопросы