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

Python如何将堆叠条形图最大区块置于底部?

让堆叠条形图最大区块位于底部的解决方案

我明白你想让堆叠条形图里最大的区块待在最底部的需求,其实核心就是要先确定区域的排序逻辑,再调整透视表的列顺序,这样pandas绘制堆叠图时就会自动把排序靠前(总量最大)的区域放在最底部啦!

解决方案步骤

默认情况下,pivot_table生成的列是按字母顺序排列的,这就是最大区块不在底部的原因。我们可以按区域的全局总数量降序排序,再用这个顺序重新排列透视表的列:

  • 计算每个区域的总数量并排序
  • 用排序后的区域列表调整透视表的列顺序
  • 绘制堆叠条形图

完整代码示例

import pandas as pd
import matplotlib.pyplot as plt

# 你的原始数据集
dataset = {'Year': [2019,2019,2020,2020,2017,2017,2017,2017,2017,2018,2018,2018,2018,2018,2019,2019,2019,2019,2019,2020, 2020,2020,2020,2020], 
           'Quantity': [100,50,25,30,40,50,200,600,20,40,100,20,50,400,250,300,125,75,90,10,225,550,450,55], 
           'Regions': ['Europe','Asia','Africa','Africa','Other','Asia','Africa','Other','America','America','Europe','Europe', 'Other','Europe','Asia','Africa','Asia','Europe','Other','Africa','Europe','Asia','Africa','Europe']}
df = pd.DataFrame(data=dataset)

# 计算各区域的全局总数量,按降序排序得到区域顺序
region_totals = df.groupby('Regions')['Quantity'].sum().sort_values(ascending=False)
sorted_regions = region_totals.index.tolist()

# 生成透视表,并按排序后的区域顺序调整列
df_pt = df.pivot_table(index='Year', columns='Regions', values='Quantity')[sorted_regions]

# 绘制堆叠条形图
df_pt.plot.bar(stacked=True, figsize=(10, 6))
plt.title('Stacked Bar Chart with Largest Segment at Bottom')
plt.ylabel('Total Quantity')
plt.show()

原理说明

pandas的堆叠条形图是按列的顺序从下往上堆叠的,我们把总数量最大的区域列放在最前面,它就会自动成为每个条形最底部的区块,后续依次往上是总量更小的区域。同时这种方式能保证每个区域的颜色固定,方便读者理解图表。

可选:按单年份内的数量排序(不推荐)

如果你需要每个年份单独按区块大小排序(每个年份的最大区块在底部,但区域顺序可能随年份变化),可以用下面的代码,但要注意这种方式会导致区域颜色不固定,可读性较差:

# 对每个年份的数值单独降序排序
df_pt_sorted_per_year = df_pt.apply(lambda x: x.sort_values(ascending=False).reset_index(drop=True), axis=1)
df_pt_sorted_per_year.plot.bar(stacked=True, figsize=(10,6))
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:50:36