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

如何在Matplotlib条形图中反转堆叠数据的显示顺序?

反转Matplotlib堆叠条形图顺序并调整数值标签位置

要实现堆叠顺序反转(从下到上为Visited game、Applications、Registrations、Website visits),核心是反转DataFrame的列顺序,同时适配调整数值标签的位置逻辑,以下是完整的实现方案:

核心步骤与代码示例

1. 准备数据与反转列顺序

Matplotlib绘制堆叠条形图时,会按照DataFrame的列顺序从下到上堆叠,因此直接反转列的索引即可改变堆叠顺序:

import pandas as pd
import matplotlib.pyplot as plt

# 示例数据(替换为你的真实数据)
funnel_data = {
    'Website visits': [1000],
    'Registrations': [750],
    'Applications': [400],
    'Visited game': [200]
}
df = pd.DataFrame(funnel_data)

# 反转列顺序,指定目标堆叠的从下到上顺序
reversed_df = df[['Visited game', 'Applications', 'Registrations', 'Website visits']]

2. 绘制反转后的堆叠条形图并添加数值标签

使用Pandas的plot.bar(stacked=True)直接生成堆叠图,然后遍历每个条形补丁(patch)计算标签位置,确保标签落在对应条形的中心:

# 绘制堆叠条形图
ax = reversed_df.plot(kind='bar', stacked=True, figsize=(8, 6), 
                      color=['#ff6b6b', '#4ecdc4', '#45b7d1', '#96ceb4'])

# 添加数值标签到每个条形中心
for patch in ax.patches:
    height = patch.get_height()
    if height == 0:  # 跳过高度为0的条形(避免空标签)
        continue
    # 计算标签的坐标:x为条形中心,y为条形底部+高度的一半
    x_pos = patch.get_x() + patch.get_width() / 2
    y_pos = patch.get_y() + height / 2
    # 添加标签文本
    ax.text(x_pos, y_pos, f'{int(height)}', 
            ha='center', va='center', fontweight='bold', fontsize=10)

# 调整图表样式
ax.set_title('用户转化漏斗(反转堆叠顺序)', fontsize=14)
ax.set_xlabel('转化阶段', fontsize=12)
ax.set_ylabel('用户数量', fontsize=12)
# 调整图例位置,避免遮挡图表
ax.legend(title='转化阶段', bbox_to_anchor=(1.02, 1), loc='upper left')
plt.tight_layout()
plt.show()

关键细节说明

  • 堆叠顺序反转原理:Pandas的plot.bar(stacked=True)会按列的先后顺序堆叠,第一个列对应最底层条形,最后一个列对应最上层条形,因此反转列索引直接改变堆叠顺序。
  • 标签位置适配:通过patch.get_y()获取当前条形的底部基准位置,加上高度的一半确保标签落在条形中心,不管堆叠顺序如何,这个逻辑都能准确匹配每个条形的位置。
  • 多行数据兼容:如果你的数据包含多个类别(比如多组漏斗对比),只需保持列顺序反转即可,标签逻辑无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:42:31