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

如何在Matplotlib中调整堆叠条形图层级:将最大组置于底层

实现堆叠条形图按占比排序(最大组置于底层)

核心逻辑是按各组的总占比从大到小排序,按此顺序依次绘制条形图——Matplotlib中先绘制的条形会处于堆叠的最底层,后绘制的会叠加在上方。

以下是具体实现代码:

import matplotlib.pyplot as plt
import numpy as np

# 示例数据:替换成你的实际数据
categories = ['类别1', '类别2', '类别3', '类别4']
group_names = ['橙色组', '蓝色组', '绿色组', '紫色组']
# 每组在各分类下的数值(行对应组,列对应分类)
group_values = np.array([
    [28, 32, 25, 30],  # 橙色组(假设为当前占比最大的组)
    [16, 22, 14, 20],
    [12, 15, 9, 16],
    [9, 11, 7, 13]
])

# 计算每组的总数值,用于排序
group_totals = group_values.sum(axis=1)
# 获取按总数值降序排列的组索引
sorted_indices = np.argsort(group_totals)[::-1]

# 按排序结果重新整理组名和数值
sorted_groups = [group_names[i] for i in sorted_indices]
sorted_values = group_values[sorted_indices]

# 绘制堆叠条形图
plt.figure(figsize=(10, 6))
bottom_pos = np.zeros(len(categories))  # 初始底部位置为0

for group_name, values in zip(sorted_groups, sorted_values):
    plt.bar(categories, values, bottom=bottom_pos, label=group_name)
    bottom_pos += values  # 更新底部位置,实现堆叠

plt.title('按占比排序的堆叠条形图')
plt.xlabel('分类')
plt.ylabel('数值')
plt.legend()
plt.show()

关键说明

  • np.argsort(group_totals)[::-1]:先得到各组总数值从小到大的索引,反转后转为降序,确保占比最大的组(橙色组)排在首位,最先被绘制。
  • bottom 参数:控制每组条形的起始位置,初始为0,每绘制完一组就将底部位置累加当前组的数值,后续组会叠加在之前所有组的上方。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:05:02