如何绘制水平条形图,条形图的末尾带有值,类似于this
我尝试过
plt.barh(inc.index,inc)
plt.yticks(inc.index)
plt.xticks(inc);
plt.xlabel("Order Count")
plt.ylabel("Date")
答案 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()
答案 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 的上限设置为略高于 最大订单计数,以提供注释空间。
对于您的部分数据,我得到了
还有一个改进:
如我所见,您的数据是带有 DatetimeIndex 的系列。
因此,如果您想将y标签值用作日期,则仅 (不带日期) 00:00:00 小时),将索引转换为 string :
inc.index = inc.index.strftime('%Y-%m-%d')
像我一样,生成我的情节。