Python pandas / matplotlib在条形图列上方注释标签[重复]

Posted

技术标签:

【中文标题】Python pandas / matplotlib在条形图列上方注释标签[重复]【英文标题】:Python pandas / matplotlib annotating labels above bar chart columns [duplicate] 【发布时间】:2014-06-28 18:23:23 【问题描述】:

如何在此处为条形图中的条形上方添加值的标签:

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()

【问题讨论】:

【参考方案1】:

不访问 DataFrame 的解决方案是使用 patch 属性:

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(第二个参数)才能获得所需的标签位置。

垂直条

我发现这种格式总体上是最好的:

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')

【讨论】:

嘿卡米尔。我尝试了这个解决方案,并且可以获得图表上的注释。但是,对于我的堆叠条形图,它们的顺序相反。它是一个带有三个堆栈的单条 [10%,30%,60%]。注释为 [60%,30%,10%]。我不明白为什么。你能推荐点什么吗? 关于折线图?【参考方案2】:

捕获绘图所在的轴,然后将其作为通常的matplotlib 对象进行操作。将值放在条形上方将是这样的:

ax = df.plot(kind='bar',  title='Scores', rot=0)
ax.set_ylim(0, 12)
for i, label in enumerate(list(df.index)):
    score = df.loc[label]['Score']
    ax.annotate(str(score), (i, score + 0.2))

【讨论】:

以上是关于Python pandas / matplotlib在条形图列上方注释标签[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python matplot怎么画箭头

python matplot怎么设置rgb

Pandas数据分析

Python交互图表可视化Bokeh:1. 可视交互化原理| 基本设置

根据星期时间统计日期总量,绘制matplotlib,pandas,Python

数据科学必备Pandas数据分析可视化常用举例