我正在尝试用正误差线和图中的最大值绘制4个平均值。
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)
但是我无法找出如何只绘制正误差条。 所以我最终得到了这样的图表:
任何建议都将不胜感激。
答案 0 :(得分:14)
如果我理解正确,你可以这样做:
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()
结果:
这样做是因为您可以传递yerr
一个2xN
列表,代表正面和负面的“抵消”,请参阅documentation。