如何在条形图中的条形图上方添加值的标签:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.DataFrame({'Users': [ 'Bob', 'Jim', 'Ted', 'Jesus', 'James'],
'Score': [10,2,5,6,7],})
df = df.set_index('Users')
df.plot(kind='bar', title='Scores')
plt.show()
答案 0 :(得分:24)
不访问DataFrame的解决方案是使用patches属性:
ax = df.plot.bar(title="Scores")
for p in ax.patches:
ax.annotate(str(p.get_height()), xy=(p.get_x(), p.get_height()))
注意你必须使用xy kwarg(2nd arg)来获得你想要的标签位置。
我发现这种格式通常是最好的:
ax.annotate("%.2f" % p.get_height(), (p.get_x() + p.get_width() / 2., p.get_height()), ha='center', va='center', xytext=(0, 10), textcoords='offset points')
我发现以下格式适用于水平条:
ax.annotate("%.2f" % p.get_width(), (p.get_x() + p.get_width(), p.get_y()), xytext=(5, 10), textcoords='offset points')
答案 1 :(得分:12)
捕获绘制绘图的轴,然后将其作为通常的matplotlib
对象进行操作。将值高于条形图将是这样的:
ax = df.plot(kind='bar', title='Scores')
ax.set_ylim(0, 12)
for i, label in enumerate(list(df.index)):
score = df.ix[label]['Score']
ax.annotate(str(score), (i, score + 0.2))