2012-11-09 2 views
10

私は4つの平均値を正のエラーバーとプロット内の最大値でプロットしようとしています。pyplot.barを使用して正のエラーバーをプロットするにはどうすればよいですか?

means = [26.82,26.4,61.17,61.55]   # Mean Data 
stds = [4.59,4.39,4.37,4.38]   # Standard deviation Data 
peakval = ['26.82','26.4','61.17','61.55'] # String array of means 

ind = np.arange(len(means)) 
width = 0.35 
colours = ['red','blue','green','yellow'] 

pyplot.figure() 
pyplot.title('Average Age') 
for i in range(len(means)): 
    pyplot.bar(ind[i],means[i],width,color=colours[i],align='center',yerr=stds[i],ecolor='k') 
pyplot.ylabel('Age (years)') 
pyplot.xticks(ind,('Young Male','Young Female','Elderly Male','Elderly Female')) 

def autolabel(bars,peakval): 
    for ii,bar in enumerate(bars): 
     height = bars[ii] 
     pyplot.text(ind[ii], height-5, '%s'% (peakval[ii]), ha='center', va='bottom') 
autolabel(means,peakval)  

しかし、正のエラーバーのみをプロットする方法はわかりません。 は、だから私はこのようなグラフで終わる:

Average Age

任意の提案をいただければ幸いです。

答えて

11

私が正しく理解している場合、あなたがこれを行うことができます:

import numpy as np 
from matplotlib import pyplot 

means = [26.82,26.4,61.17,61.55]   # Mean Data 
stds = [(0,0,0,0), [4.59,4.39,4.37,4.38]] # Standard deviation Data 
peakval = ['26.82','26.4','61.17','61.55'] # String array of means 

ind = np.arange(len(means)) 
width = 0.35 
colours = ['red','blue','green','yellow'] 

pyplot.figure() 
pyplot.title('Average Age') 
pyplot.bar(ind, means, width, color=colours, align='center', yerr=stds, ecolor='k') 
pyplot.ylabel('Age (years)') 
pyplot.xticks(ind,('Young Male','Young Female','Elderly Male','Elderly Female')) 

def autolabel(bars,peakval): 
    for ii,bar in enumerate(bars): 
     height = bars[ii] 
     pyplot.text(ind[ii], height-5, '%s'% (peakval[ii]), ha='center', va='bottom') 
autolabel(means,peakval) 
pyplot.show() 

結果:

enter image description here

あなたは正と負「のオフセットを表す、yerrとして2xNリストを渡すことができますので、それは動作します"、documentationを参照してください。

+0

完璧、ありがとう。 –

関連する問題