如何使用 pyplot.barh() 在每个柱上显示柱的值

新手上路,请多包涵

我生成了条形图,如何在每个条形图上显示条形图的值?

当前情节:

在此处输入图像描述

我想得到什么:

在此处输入图像描述

我的代码:

 import os
import numpy as np
import matplotlib.pyplot as plt

x = [u'INFO', u'CUISINE', u'TYPE_OF_PLACE', u'DRINK', u'PLACE', u'MEAL_TIME', u'DISH', u'NEIGHBOURHOOD']
y = [160, 167, 137, 18, 120, 36, 155, 130]

fig, ax = plt.subplots()
width = 0.75 # the width of the bars
ind = np.arange(len(y))  # the x locations for the groups
ax.barh(ind, y, width, color="blue")
ax.set_yticks(ind+width/2)
ax.set_yticklabels(x, minor=False)
plt.title('title')
plt.xlabel('x')
plt.ylabel('y')
#plt.show()
plt.savefig(os.path.join('test.png'), dpi=300, format='png', bbox_inches='tight') # use format='svg' or 'pdf' for vectorial pictures

原文由 Franck Dernoncourt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

更新:现在有一个内置的方法!向下滚动到“matplotlib 3.4.0 中的新增功能”的几个答案。

如果您不能升级那么远,则不需要太多代码。添加:

 for i, v in enumerate(y):
    ax.text(v + 3, i + .25, str(v), color='blue', fontweight='bold')

结果:

在此处输入图像描述

y 值 vax.text 的 x 位置和字符串值,方便的是条形图的每个条的度量为 1,因此枚举 i 是 y 位置。

原文由 cphlewis 发布,翻译遵循 CC BY-SA 4.0 许可协议

matplotlib 3.4.0 中的新功能

现在有一个内置的 Axes.bar_label 自动标记条的辅助方法:

 fig, ax = plt.subplots()
bars = ax.barh(indexes, values)

ax.bar_label(bars)

请注意,对于分组/堆叠条形图,将有多个条形容器,它们都可以通过 ax.containers 访问:

 for bars in ax.containers:
    ax.bar_label(bars)

更多细节:

原文由 tdy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题