如何在matplotlib的柱状图中显示跨列文本?

27

我有一个柱状图,希望在每个柱形上显示一些文本,应该如何实现?

1个回答

39

我相信这会为您指明正确的方向:

http://matplotlib.sourceforge.net/examples/pylab_examples/barchart_demo.html.

你最感兴趣的部分是:

def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x()+rect.get_width()/2., 1.05*height, '%d'%int(height),
                ha='center', va='bottom')

文本的位置由高度函数或列的高度确定,放置在每个列顶部的数字是通过:'%d' %int(height)写入的。因此,您只需要创建一个字符串数组(称为'name'),其中包含要放置在列顶部的名称,并进行迭代。确保将格式更改为字符串格式(%s),而不是双精度浮点数。

def autolabel(rects):
# attach some text labels
    for ii,rect in enumerate(rects):
        height = rect.get_height()
        plt.text(rect.get_x()+rect.get_width()/2., 1.02*height, '%s'% (name[ii]),
                ha='center', va='bottom')
autolabel(rects1)

那就可以了!


我已经尝试理解它,但我想显示一个字符串,这就是困扰我的地方。我搞砸了它,但我无法修改它以适应我的情况。 - IordanouGiannis
@cosmosis 如果y值相差很大(例如,最小为0,最大为1300),则1.02*height并不有效。有什么建议吗? - tobip
@cosmosis,这是一个不错的解决方法,但仍然无法保证条形图和文本之间的距离始终相同。 - tobip
我也得到了 height = plt.get_height() AttributeError: 'module' object has no attribute 'get_height' - Dhruv Ghulati
1
@DhruvGhulati 这个函数不会传递一个图表,它会在直方图图表的特定高度上生成文本,其中 pltimport matplotlib.pyplot as plt 的简写。较低函数中的标签不需要被读取,因为它们是枚举过的,连同直方图的 rects 一起,因此不需要被读取。 - cosmosis
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接