求助:使用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
相关产品推荐
相关产品推荐

