2016-08-25 55 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)