如何基于Pandas DataFrame生成6个变量的2行3列子图(保留Division列)
多变量子图实现方案(基于Pandas & Matplotlib)
核心思路
- 定义包含原
Sales在内的6个目标变量列表 - 创建2行3列的子图布局,统一管理画布与子图对象
- 循环遍历每个变量,复用透视表逻辑在对应子图绘制折线图
- 统一调整布局与样式,保证图表可读性
完整实现代码
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
相关产品推荐
相关产品推荐

