在matplotlib上绘制条形图

时间:2019-11-03 09:27:07

标签: python matplotlib

如何绘制水平条形图,条形图的末尾带有值,类似于this

我尝试过

plt.barh(inc.index,inc)
plt.yticks(inc.index)
plt.xticks(inc);
plt.xlabel("Order Count")
plt.ylabel("Date")

Bar chart

2 个答案:

答案 0 :(得分:0)

答案可以在这里找到: How to display the value of the bar on each bar with pyplot.barh()?

只需像cphlewis所说的那样添加for循环:

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

这是我针对您的情况尝试的代码:

import matplotlib.pyplot as plt
import numpy as np
inc = [12, 25, 50, 65, 40, 45]
index = ["2019-10-31", "2019-10-30", "2019-10-29", "2019-10-28", "2019-10-27", "2019-10-26"]

fig, ax = plt.subplots()
ax.barh(index,inc, color='black')
plt.yticks(index)
plt.xticks(inc);
plt.xlabel("Order Count")
plt.ylabel("Date")

# Set xticks
plt.xticks(np.arange(0, max(inc)+15, step=10))

# Loop for showing inc numbers in the end of bar
for i, v in enumerate(inc):
    ax.text(v + 1, i, str(v), color='black', fontweight='bold')
plt.show()

图看起来像这样: enter image description here

答案 1 :(得分:0)

要生成叠加了值的图,请运行:

ax = inc.plot.barh(xticks=inc, xlim=(0, 40));
ax.set_xlabel('Order Count')
ax.set_ylabel('Date')
for p in ax.patches:
    w = p.get_width()
    ax.annotate(f' {w}', (w + 0.1, p.get_y() + 0.1))

请注意,我将 xlim 的上限设置为略高于 最大订单计数,以提供注释空间。

对于您的部分数据,我得到了

enter image description here

还有一个改进:

如我所见,您的数据是带有 DatetimeIndex 系列

因此,如果您想将y标签值用作日期,则仅 (不带日期) 00:00:00 小时),将索引转换为 string

inc.index = inc.index.strftime('%Y-%m-%d')

像我一样,生成我的情节。