You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib堆叠柱状图顶部标注总计数值

解决堆叠柱状图顶部标注总计数值的问题

你可以通过遍历x轴刻度位置,结合已计算的df['total']数值,在每个堆叠柱的顶部添加总计标注。以下是修改后的完整代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame()
df['year'] = ['2012','2013','2014']
df['test 1'] = [4,17,5]
df['test 2'] = [1,4,1]
df['test 2a'] = [1,1,2]
df['test 3'] = [2,1,8]
df['test 4'] = [2,1,5]
df['test 4a'] = [2,1,7]
df = df.set_index('year')
df['total'] = df.sum(axis=1)

fig, ax = plt.subplots(1,1)
df.drop(columns=['total']).plot(kind='bar', stacked=True, ax=ax)

# 保留每个分段的中心标注(如果不需要可删除这段)
for c in ax.containers:
    ax.bar_label(c, label_type='center')

# 标注每个堆叠柱顶部的总计数值
for x, total in zip(ax.get_xticks(), df['total']):
    # x是每个柱的中心位置,total是堆叠高度,va='bottom'让文字在柱顶上方
    ax.text(x, total, f'{total}', horizontalalignment='center', verticalalignment='bottom', fontweight='bold')

plt.show()

关键说明:

  • ax.get_xticks()获取每个堆叠柱的中心x坐标,和df['total']的数值一一对应
  • ax.text()的verticalalignment='bottom'确保文字在柱顶上方,避免和柱体重叠
  • 如果不需要分段的中心标注,直接删除循环ax.containers的代码块即可

内容的提问来源于stack exchange,提问作者Medulla Oblongata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:50:33