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

如何基于Pandas DataFrame生成6个变量的2行3列子图(保留Division列)

多变量子图实现方案(基于Pandas & Matplotlib)

核心思路

  1. 定义包含原Sales在内的6个目标变量列表
  2. 创建2行3列的子图布局,统一管理画布与子图对象
  3. 循环遍历每个变量,复用透视表逻辑在对应子图绘制折线图
  4. 统一调整布局与样式,保证图表可读性

完整实现代码

import matplotlib.pyplot as plt
import pandas as pd

# 替换为你实际需要的6个变量名
target_vars = ['Sales', 'Profit', 'Operating Cost', 'Total Revenue', 'Units Sold', 'Customer Count']

# 创建2行3列子图布局,设置合适画布尺寸
fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(18, 10))
# 展平子图数组,方便循环遍历
axes = axes.flatten()

# 循环处理每个变量
for idx, var in enumerate(target_vars):
    # 复用原透视表逻辑,仅替换values参数为当前变量
    subset = (df_2.pivot_table(index=['Response Month (YYYY-MM)'],
                               columns='Division', values=var)
              .reset_index()
              .set_index('Response Month (YYYY-MM)')
              )
    
    # 在对应子图绘制折线图,保留原样式设置
    subset.plot(rot=90, style={c: i for i, c in zip(subset.columns, subset.columns)},
                ax=axes[idx])
    
    # 设置子图标题,明确当前变量
    axes[idx].set_title(f'{var} by Division')
    # 缩小x轴标签字号,避免重叠
    axes[idx].tick_params(axis='x', labelsize=8)

# 自动调整子图间距,避免元素重叠
plt.tight_layout()
plt.show()

关键说明

  • 完全保留原代码中columns='Division'的分组逻辑,每个子图都会按部门展示对应变量的趋势
  • 通过plt.subplots直接创建布局,展平后的axes数组让循环逻辑更简洁
  • 每个子图独立设置标题与标签大小,提升整体可读性
  • 复用了你原有的样式字典设置,保证各部门线条样式统一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:21:49