Matplotlib 注释不工作
我之前没有用过matplotlib这个库——我已经下载了这个库并且看过了文档。我想用下面的代码在柱子上方显示数值。但是,数值没有显示出来。
import numpy as np
import matplotlib.pyplot as plt
data = [ ("data1", 34), ("data5", 22),
("data12", 11), ( "data8", 28),
("data53", 57), ( "data11", 39),
("data12", 23), ( "data15", 98)]
N = len(data)
x = np.arange(1,N+1)
y = [ num for (s, num) in data ]
labels = [ s for (s, num) in data ]
width = 1
bar1 = plt.bar( x, y, width, color="y" )
plt.ylabel( 'Intensity' )
plt.xticks(x + width/2.0, labels )
for x, y in zip(x, y):
plt.annotate("%i" % y, (x, y + 200), ha= 'center')
plt.show()
任何帮助都非常感谢。
1 个回答
5
你的问题其实很简单,就是你的注释位置在当前y轴范围的上方太多了,因为你在y坐标上加了200。
import numpy as np
import matplotlib.pyplot as plt
data = [ ("data1", 34), ("data5", 22),
("data12", 11), ( "data8", 28),
("data53", 57), ( "data11", 39),
("data12", 23), ( "data15", 98)]
N = len(data)
x = np.arange(1,N+1)
y = [ num for (s, num) in data ]
labels = [ s for (s, num) in data ]
width = 1
bar1 = plt.bar( x, y, width, color="y" )
plt.ylabel( 'Intensity' )
plt.xticks(x + width/2.0, labels )
y_shift = 5
x_shift = width/2.0
for x, y in zip(x, y):
plt.annotate("%i" % y, (x + x_shift, y + y_shift), ha= 'center')
plt.ylim(0,110)
plt.show()
只要把垂直偏移量改成一个更合理的数字(这里选择的是y_shift = 5
),就能解决高度的问题。不过,你还需要在x坐标上加上width/2.0
,这样文字才能放在条形图的中间(假设你是想要这样)。我还在最后加了plt.ylim(0,110)
,这样可以稍微调整y轴的范围,以便显示最大的条形图的数字。