此博客介绍使用bar生成柱状图。其中对每个柱状图添加标注时出现问题,在网上找到了答案,会在文中介绍。
代码如下:
import matplotlib.pyplot as plt
import numpy as np
n=12
x=np.arange(n)
y1=(1-x/float(n))*np.random.uniform(0.5,1.0,n)
y2=-((1-x/float(n))*np.random.uniform(0.5,1.0,n)) #正态分布生成随机数 范围:0.5-1.0 个数:n
plt.bar(x,y1,facecolor='#9999ff',edgecolor='white') #facecolor为颜色,edgecolor为背景色
plt.bar(x,y2,facecolor='#ff9999',edgecolor='white') #生成条状图
Y1=zip(x,y1)
Y2=zip(x,y2) #需要提前将x列表的值压缩好
for x,y in Y1:
plt.text(x,y+0.05,'%.2f'% y,ha='center',va='bottom') #ha为对其方式 va也是对其方式
for x,y in Y2:
plt.text(x,y-0.1,'%.2f'% y,ha='center',va='bottom') #ha为对其方式 va也是对其方式
plt.xlim(-5,n)
plt.xticks(()) #不显示ticks
plt.ylim(-1.25,1.25)
plt.yticks(())
plt.show()
效果图如下:
使用text循环添加注释时,使用下面的代码会出现错误:
for x,y in zip(x,y1):
plt.text(x+0.4, 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='top')
出现的错误提示如下:
TypeError: zip argument #1 must support iteration
解释:当第一个for循环结完成后,x列表会被x列表的最后一个值所代替。所以进入下一个循环时提示说x对应的数据类型不对,不支持迭代。