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

Python pandas groupby后如何在同一张画布绘制多条折线而非独立图表

解决pandas分组后多折线同图展示的问题

问题根因

groupby对象直接调用plot方法时,默认会为每个分组单独创建独立的绘图实例,因此会输出3张独立图表。

修复代码

方案1:基于matplotlib原生实现

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({ 
'A': ['aaa','aaa','aaa','aaa','aaa','aaa','aaa','aaa','aaa','aaa','aaa','aaa'],
'B': ['bbb','bbb','bbb','bbb','bbb','bbb','bbb','bbb','bbb','bbb','bbb','bbb'],
'DC': ['L','L','L','L','Q','Q','Q','Q','ZL','ZL','ZL','ZL'],
'score' : [0.1,0.2,0.3,0.4,0.11,0.21,0.31,0.39,0.1,0.22,0.3,0.42],
'max_sel' : [2.0,3.3,6.0,7.1,3.1,4.0,8.0,8.9,1.2,3.0,5.0,6.6]
})

# 提前创建公共的绘图轴对象
fig, ax = plt.subplots(figsize=(7,4))

# 遍历所有分组,指定在同一个ax上绘图
for (a_val, b_val, dc_val), group_df in df.groupby(["A","B","DC"]):
    group_df.plot(
        ax=ax, 
        x="score", 
        y="max_sel", 
        label=f"{a_val}_{b_val}_{dc_val}",
        xlabel="score",
        ylabel="max_sel"
    )

plt.show()

方案2:基于seaborn简化实现

如果可以使用seaborn库,代码会更简洁:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame({ 
'A': ['aaa','aaa','aaa','aaa','aaa','aaa','aaa','aaa','aaa','aaa','aaa','aaa'],
'B': ['bbb','bbb','bbb','bbb','bbb','bbb','bbb','bbb','bbb','bbb','bbb','bbb'],
'DC': ['L','L','L','L','Q','Q','Q','Q','ZL','ZL','ZL','ZL'],
'score' : [0.1,0.2,0.3,0.4,0.11,0.21,0.31,0.39,0.1,0.22,0.3,0.42],
'max_sel' : [2.0,3.3,6.0,7.1,3.1,4.0,8.0,8.9,1.2,3.0,5.0,6.6]
})

# 生成分组标签列
df["group_name"] = df["A"] + "_" + df["B"] + "_" + df["DC"]

# 直接绘图,hue参数按分组区分折线
sns.lineplot(data=df, x="score", y="max_sel", hue="group_name")
plt.xlabel("score")
plt.ylabel("max_sel")
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:06:01