Matplotlib 注释不起作用

Scr*_*ies 4 python 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()
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏

Ffi*_*ydd 5

您的问题很简单,因为您将 200 添加到 y 位置,因此注释的位置高于当前的 y 轴限制。

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()
Run Code Online (Sandbox Code Playgroud)

只需将垂直偏移更改为更合理的数字(在上面选择为y_shift = 5)即可修复高度问题,但您还需要添加width/2.0到 x 位置以使文本位于条的中心(假设这是您想要的)。我还在最后添加plt.ylim(0,110)了一点 y 限制以显示最大条的数字。

示例图