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

如何基于指定dataframe绘制按g列分组的带误差带多折线图

这个需求完全可以实现,具体实现步骤和代码示例如下:

实现步骤

1. 数据预处理

你当前的DataFrame是宽表格式,需要先转换为绘图所需的长表格式,把f1-f5这几个特征列转为x轴的分类值,对应的值作为y轴数值,同时保留g列作为分组染色的依据。
转换用pandas的melt方法即可,代码如下:

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

# 构造你给出的示例DataFrame
df = pd.DataFrame({
    'f1.': [1., 2., 1., 5., 9., 8.],
    'f2.': [2., 4., 2., 4., 2., 4.],
    'f3.': [3., 6., 3., 6., 7., 2.],
    'f4.': [4., 8., 6., 8., 5., 4.],
    'f5.': [1., 7., 1., 7., 1., 5.],
    'g': [0, 0, 1, 1, 0, 1]
})

# 宽表转长表
df_long = df.melt(
    id_vars=['g'], 
    value_vars=['f1.', 'f2.', 'f3.', 'f4.', 'f5.'],
    var_name='feature',
    value_name='value'
)

2. 绘制带误差带的折线图

直接用seaborn的lineplot函数即可,它默认会按分组计算均值和置信区间作为误差带,hue参数指定为g即可按g列的取值区分线条颜色:

sns.lineplot(
    data=df_long,
    x='feature',
    y='value',
    hue='g',
    ci=95, # 误差带为95%置信区间,要换成标准差可以设为ci='sd'
    marker='o' # 可以加标记点让数据点更清晰
)
plt.show()

如果你需要每一行单独画一条线、不需要聚合计算均值的误差带,也可以单独遍历每一行绘图,同时按g列取对应颜色,误差带可以根据你自己的误差数据源设置,如果是用每行的波动范围做误差带,自行计算上下界后调用plt.fill_between即可实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 01:21:01