首页 > 解决方案 > Seaborn/Matplotlib 沿线创建自定义错误带

问题描述

我有一个实验,有 10 名参与者,每个人收集了 96 个准确度。acc_i表示参与者在时间步 i 的整体准确度。因此,我有一个 10x96 的 numpy 矩阵,如下所示:

[[acc_0,acc_1,acc_2,...acc_95]
 [acc_0,acc_1,acc_2,...acc_95]
 [acc_0,acc_1,acc_2,...acc_95]
            .
            .
            .
 [acc_0,acc_1,acc_2,...acc_95]]

我想在每个时间步绘制一条所有参与者的平均准确度线,以及一个显示平均 +- 1 标准偏差的误差带。pd.Series(np.average(human_accuracies, axis=0))我可以使用和分别计算平均偏差和标准偏差pd.Series(np.std(human_accuracies, axis=0))。但是,当我使用时,这会在图表上给我两条单独的线:

sns.lineplot(data=avg_accuracies)
sns.lineplot(data=sd_accuracies)

如下所示:

在此处输入图像描述

我怎样才能使我的情节更像这里显示的内容:

在此处输入图像描述

我希望使用每个时间步的标准偏差i+- 每个时间步的平均精度来计算误差带i

标签: pythonmatplotlibgraphseabornaverage

解决方案


你可以plt.fill_between这样使用:

plt.fill_between(x=np.arange(len(avg_accuracies)),
                 y1=avg_accuracies - sd_accuracies,
                 y2=avg_accuracies + sd_accuracies,
                 alpha=0.25
                 )
plt.plot(np.arange(len(avg_accuracies)), avg_accuracies)

输出:

在此处输入图像描述


推荐阅读