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

如何在pandas groupby场景下绘制多变量subplot子图?

解决方案

方案1:自定义程度高的手动分配子图方案

这种方案可以单独调整每个子图的样式、坐标轴配置,适合需要精细化调整的场景。

import matplotlib.pyplot as plt

# 1. 提前计算所有变量按Hour分组的均值,避免重复分组计算
hourly_stats = df.groupby('Hour')[['var1', 'var2', 'var3']].mean()

# 2. 创建子图网格,nrows、ncols根据你要绘制的变量数量调整,示例为3个变量3行1列
fig, axes = plt.subplots(nrows=3, ncols=1, figsize=(10, 15))

# 3. 配置每个变量的绘图参数,可按需新增、修改
var_settings = [
    ("var1", "red", "o"),
    ("var2", "green", "^"),
    ("var3", "blue", "s")
]

# 4. 遍历变量和子图,逐个绘制
for ax, (var_name, color, marker) in zip(axes, var_settings):
    hourly_stats[var_name].plot(
        ax=ax,
        color=color,
        marker=marker
    )
    ax.set_title(var_name)
    # 可在此处添加更多子图配置,比如ax.set_ylabel("均值")、ax.grid(True)等

# 自动调整子图间距,避免标题、标签重叠
plt.tight_layout()
plt.show()

方案2:快速生成的内置参数方案

如果不需要精细化调整每个子图,可以直接用pandas plot的subplots参数一键生成多图:

import matplotlib.pyplot as plt

hourly_stats = df.groupby('Hour')[['var1', 'var2', 'var3']].mean()
hourly_stats.plot(
    subplots=True,
    figsize=(10, 15),
    color=["red", "green", "blue"],
    marker=["o", "^", "s"]
)
plt.tight_layout()
plt.show()

补充说明

核心逻辑是通过plot方法的ax参数指定绘图的子图对象,和你是否使用groupby计算数据没有关联,groupby仅负责提前聚合出需要绘制的数据集。
如果你的变量数量较多,需要使用多列的子图网格(比如2行2列),只需将生成的axes数组扁平化后再循环即可:

# 示例为4个变量,2行2列布局
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 10))
axes = axes.flatten() # 将二维的axes数组转为一维,方便循环匹配变量
# 后续循环逻辑和方案1完全一致

内容的提问来源于stack exchange,提问作者Julián Ricardo Ángel Palomino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:57:03