python - 在 Python 中创建和注释分组条形图

标签 python matplotlib seaborn

我正在使用以下 DataFrame,

我想创建一个类似于下图所示的分组条形图 enter image description here

具有索引值 'A','B','C','D','E' X 轴及其各自的系列(提前、逾期、准时、逾期)。我还想注释每个条形图(在每个条形图上写下数据值)

要复制我的 DataFrame,请使用以下代码段:

df = pd.DataFrame.from_dict({'Early': {'A': 824, 'B': 701, 'C': 1050, 'D': 764, 'E': 993},
 'Long Overdue': {'A': 238, 'B': 270, 'C': 489, 'D': 549, 'E': 471},
 'On Time': {'A': 1021, 'B': 1025, 'C': 120, 'D': 71, 'E': 57},
 'Overdue': {'A': 493, 'B': 580, 'C': 917, 'D': 1192, 'E': 1055}}
                      )

最佳答案

还有其他方法可以将数据格式转换为垂直格式,但我们将为该垂直数据绘制条形图。然后获取该条的 x 轴位置和高度,并对其进行注释。在我的代码中,我将文本放置在高度的一半处。

df_long = df.unstack().to_frame(name='value')
df_long = df_long.swaplevel()
df_long.reset_index(inplace=True)
df_long.columns = ['group', 'status', 'value']

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(12, 8))

g = sns.barplot(data=df_long, x='group', y='value', hue='status', ax=ax)

for bar in g.patches:
    height = bar.get_height()
    ax.text(bar.get_x() + bar.get_width() / 2., 0.5 * height, int(height),
                ha='center', va='center', color='white')

plt.show()

enter image description here

关于python - 在 Python 中创建和注释分组条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68608526/

相关文章:

python - 是否有用于临时更改 matplotlib 设置的上下文管理器?

python - Python 中 "inspect"和 "interactive"命令行标志的区别

python - 从 HH :MM:SS to HH:SS 重新格式化 matplotlib x 轴

python - 嵌套字典排序时抛出关键错误

python - Pandas 在一个轴上压扁了图

python - Matplotlib 用线条和图形注释条形图的方法

python - matplotlib/seaborn 带颜色图的 fiddle 图

python - 使用seaborn和FacetGrid进行绘图,其中值是数据框中的ndarray

python - 如何删除数据框中的回车

python - 命令错误 : Can't locate revision identified by '...' when migrating using Flask-Migrate