如何用Python从给定DataFrame生成符合指定样式的堆叠柱状图
问题描述
现有如下DataFrame:
Color Level Proportion ------------------------------------- 0 Blue 1 0.1 1 Blue 2 0.3 2 Blue 3 0.6 3 Red 1 0.2 4 Red 2 0.5 5 Red 3 0.3
该DataFrame包含2个Color类别,每个类别下有3个Level,同类别下所有条目的Proportion总和为1。需生成满足以下要求的堆叠柱状图:
- 包含2个堆叠柱,分别对应每个
Color类别 - 每个堆叠柱内按
Level对应的Proportion堆叠 - 所有柱的长度均为1
- x轴标注为“proportion”
此前执行代码:
df.plot(kind='bar', stacked=True)
生成的图表不符合需求,需修改代码实现目标效果。
解决方案
要实现目标堆叠柱状图,需先重塑DataFrame结构,再调整绘图参数,具体操作如下:
重塑DataFrame结构
使用pivot方法转换数据格式,将Color设为索引,Level设为列,Proportion设为对应列的值,让每个Color对应一行数据,不同Level的比例作为独立列,适配堆叠柱状图的绘制逻辑:pivoted_df = df.pivot(index='Color', columns='Level', values='Proportion')绘制并配置堆叠柱状图
基于重塑后的DataFrame绘图,同时设置关键参数满足需求:import matplotlib.pyplot as plt # 生成堆叠柱状图 ax = pivoted_df.plot(kind='bar', stacked=True, figsize=(8, 6)) # 设置坐标轴标签 ax.set_xlabel('Color') ax.set_ylabel('proportion') # 固定y轴范围为0到1,确保所有柱子总长度统一为1 ax.set_ylim(0, 1) # 设置图例标题,明确对应Level ax.legend(title='Level') # 可选:添加图表标题 ax.set_title('Proportion Distribution by Color and Level') # 优化布局并显示图表 plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者LostinSpatialAnalysis
相关产品推荐
相关产品推荐

