Matplotlib 注释不工作

4 投票
1 回答
10611 浏览
提问于 2025-04-18 17:46

我之前没有用过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轴的范围,以便显示最大的条形图的数字。

示例图

撰写回答