条形图,也称柱状图,看起来像直方图,但完是两码事。条形图根据不同的x值,为每个x指定一个高度y,画一个一定宽度的条形;而直方图是对数据集进行区间划分,为每个区间画条形。
n = 12 # 12组数据 X = np.arange(n) Y1 = (1 - X / n) * np.random.uniform(0.5, 1.0, n) # 生成对应的y轴数据 Y2 = (1 - X / n) * np.random.uniform(0.5, 1.0, n) plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white') # +号让所有y值变成正数 plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white') # 负号让所有y值变成复数 # 加上数值 for x, y in zip(X, Y1): # 显示文本 plt.text(x, y + 0.05, '%.2f' % y, ha='center', va='bottom') for x, y in zip(X, Y2): plt.text(x, -y - 0.05, '-%.2f' % y, ha='center', va='top') plt.xlim(-0.5, n) plt.ylim(-1.25, 1.25)
将上面的代码稍微修改一下,就可以得到下面的图形:
plt.bar(X, Y1, width=0.4, facecolor='lightskyblue', edgecolor='white') plt.bar(X+0.4, Y2, width=0.4, facecolor='yellowgreen', edgecolor='white') for x,y in zip(X,Y1): plt.text(x, y+0.05, '%.2f' % y, ha='center', va= 'bottom') for x,y in zip(X,Y2): plt.text(x+0.4, y+0.05, '%.2f' % y, ha='center', va= 'bottom') plt.xlim(-0.5,6) plt.ylim(0,1.25)
更多内容参考:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html