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

求助:使用Matplotlib复现目标堆叠柱状图(附现有代码)

复现堆叠柱状图的解决方案

你想要复现一张带百分比标签的堆叠柱状图,并且已经有了透视处理后的数据集,我基于你的现有代码做了针对性调整,帮你更贴近目标效果:

核心优化点

  • 补充图表标题与坐标轴标签,对齐目标图的展示逻辑
  • 优化百分比文本的位置,确保精准居中在每个柱子分段内
  • 调整柱子宽度与图例位置,让整体布局更紧凑合理
  • 添加自动布局与y轴范围设置,避免元素截断

修改后的完整代码

import matplotlib.pyplot as plt
import numpy as np

# 假设pivoted是你的透视数据集
pivoted.plot(kind='bar',
             stacked=True, 
             colormap='tab10', 
             figsize=(10, 6),
             width=0.8)  # 调整柱子宽度,更贴近目标图的紧凑感

# 添加图表标题和坐标轴标签(请替换成目标图的对应文本)
plt.title('你的图表标题', fontsize=14, fontweight='bold')
plt.xlabel('X轴分类标签', fontsize=12)
plt.ylabel('比例(%)', fontsize=12)

# 调整图例位置,避免遮挡图表内容
plt.legend(loc="upper right", ncol=2, bbox_to_anchor=(1.18, 1))  

# 重新计算百分比文本的位置,确保精准居中
bar_width = 0.8
for idx, category in enumerate(pivoted.index):
    cumulative_height = 0
    for value in pivoted.loc[category]:
        # 计算当前分段的垂直中心位置
        text_y = cumulative_height + value / 2
        # 水平方向居中对齐柱子
        plt.text(idx - bar_width/2 + 0.4,
                 text_y,
                 f'{np.round(value * 100, 1)}%', 
                 color="black",
                 fontsize=10,
                 fontweight="bold",
                 ha='center')  # 水平居中对齐
        cumulative_height += value

# 设置y轴上限,防止顶部文本被截断
plt.ylim(0, pivoted.sum(axis=1).max() * 1.1)

# 自动调整布局,适配所有元素
plt.tight_layout()
plt.show()

进一步调整建议

如果还需要更精准匹配目标图,可以做这些调整:

  • 替换colormap参数为目标图对应的颜色组,比如如果目标图用了特定颜色,可以手动指定color列表
  • 如果你的数据集是原始计数而非比例,需要先转换为比例:pivoted = pivoted.div(pivoted.sum(axis=1), axis=0)
  • 调整字体样式、大小,完全对齐目标图的视觉风格

如果提供完整的数据集,我可以帮你做更细致的适配~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:50:29