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

如何利用DataFrame列给Matplotlib柱状图分段添加内部标签?

实现单根堆叠柱状图的分段内部标签

我明白你想要的效果——在单根堆叠柱状图的每个分段内部显示对应的aa1到aa5列标签,而且之前手动调整标签位置总是达不到理想效果对吧?下面给你一套结合Pandas和Matplotlib的可行方案,完全贴合你的需求:

步骤1:准备示例数据

先模拟一个和你结构类似的DataFrame,方便演示:

import pandas as pd
import matplotlib.pyplot as plt

# 构造示例数据
data = {
    'aa1': [30],
    'aa2': [25],
    'aa3': [20],
    'aa4': [15],
    'aa5': [10]
}
df = pd.DataFrame(data)

步骤2:绘制堆叠柱状图并添加内部标签

核心思路是通过循环逐个绘制每个分段,同时自动计算标签的居中位置,避免手动调整的误差:

plt.figure(figsize=(6, 8))

# 选中aa1到aa5列
segments = df.loc[:, 'aa1':'aa5']
# 初始化堆叠的底部位置
bottom = 0
x = 0  # 单根柱子的x坐标

# 循环每个分段,绘制柱子并添加标签
for col, value in segments.items():
    value = value.iloc[0]  # 取出单根柱子的分段数值
    # 绘制当前分段的柱子
    plt.bar(x, value, bottom=bottom, label=col)
    # 计算标签的y坐标:底部位置 + 分段高度的一半(确保居中)
    label_y = bottom + value / 2
    # 添加内部标签,设置字体样式
    plt.text(x, label_y, f'{col}\n({value})', 
             ha='center', va='center', fontsize=10, color='white')
    # 更新底部位置,为下一个分段做准备
    bottom += value

# 调整图表样式
plt.xticks([x], ['总数据'])  # 设置x轴刻度
plt.ylabel('数值')
plt.title('单根堆叠柱状图带内部分段标签')
plt.legend(loc='upper right')
plt.tight_layout()
plt.show()

关键细节说明

  • 用bottom变量自动追踪每个分段的起始位置,确保堆叠顺序正确,同时标签的y坐标计算完全基于这个变量,避免手动估算的偏差
  • plt.text()的ha='center'和va='center'确保标签在分段内水平和垂直都居中
  • 标签里可以同时显示列名和数值(比如f'{col}\n({value})'),如果只需要列名,直接用col即可

这个方案完全不需要手动调整位置,所有坐标都是基于数据自动计算的,不管你的aa1到aa5数值怎么变,标签都会自动居中在对应分段里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:16:41