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

无需硬编码字段与修改表格,用Matplotlib绘制堆叠柱状图

实现全遍历逻辑的堆叠柱状图

当然可以实现这种全遍历的逻辑,不用依赖groupby或pivot,直接基于原始表格数据就能画出目标堆叠柱状图。下面是具体的实现代码和细节说明:

1. 导入所需库

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

2. 读取并预处理数据

首先读取数据集,提取并整理月份信息(原数据包含Date列,需转换为月份维度):

# 读取数据集
df = pd.read_csv("https://raw.githubusercontent.com/Curbal-Data-Labs/Matplotlib-Labs/master/Activities.csv")

# 将日期转换为月份名称,也可以用`dt.month`获取数字月份
df['Month'] = pd.to_datetime(df['Date']).dt.month_name()

# 定义月份的自然顺序,确保X轴排序正确
month_order = ["January", "February", "March", "April", "May", "June", 
               "July", "August", "September", "October", "November", "December"]
df['Month'] = pd.Categorical(df['Month'], categories=month_order, ordered=True)

3. 提取核心类别并初始化绘图参数

# 获取唯一的月份和活动类型列表
unique_months = df['Month'].unique()
unique_activities = df['Activity Type'].unique()

# 创建X轴的位置索引
x = np.arange(len(unique_months))

# 设置柱子宽度
bar_width = 0.7

# 为每个活动类型分配不同的颜色
colors = plt.cm.tab10(np.linspace(0, 1, len(unique_activities)))

4. 全遍历绘制堆叠柱状图

# 初始化堆叠的底部基准线,初始值为0
bottom = np.zeros(len(unique_months))

plt.figure(figsize=(12, 6))

# 外层遍历每个活动类型
for activity, color in zip(unique_activities, colors):
    # 内层遍历每个月份,计算当前活动在该月的总距离
    monthly_distances = []
    for month in unique_months:
        # 筛选当月当前活动的数据,求和距离
        total_dist = df[(df['Month'] == month) & (df['Activity Type'] == activity)]['Distance'].sum()
        monthly_distances.append(total_dist)
    
    # 绘制当前活动的柱子,通过bottom参数实现堆叠
    plt.bar(x, monthly_distances, bar_width, bottom=bottom, label=activity, color=color)
    
    # 更新底部基准线,为下一个活动的堆叠做准备
    bottom += np.array(monthly_distances)

# 设置X轴的标签为月份名称
plt.xticks(x, unique_months)

# 添加图表标题和轴标签
plt.title('Monthly Total Distance by Activity Type', fontsize=14)
plt.xlabel('Month', fontsize=12)
plt.ylabel('Total Distance', fontsize=12)

# 添加图例
plt.legend(title='Activity Type')

# 自动调整布局,避免标签重叠
plt.tight_layout()
plt.show()

关键逻辑说明

  • 全程通过两层循环实现遍历:外层循环遍历每个活动类型,内层循环遍历每个月份,直接从原表格筛选对应数据并计算总距离,完全不需要groupby或pivot。
  • 利用bottom参数实现堆叠效果:每绘制完一个活动类型的柱子,就将底部基准线更新为当前柱子的顶部高度,下一个活动的柱子从该位置开始绘制。
  • 通过pd.Categorical定义月份的有序类别,确保X轴上的月份按自然时间顺序排列,避免出现乱序问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:10:23