如何基于指定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
相关产品推荐
相关产品推荐

