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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:35:26