繁体   English   中英

matplotlib:为每个x轴刻度线分组误差线

[英]matplotlib: grouping error bars for each x-axes tick

我正在尝试使用matplotlib绘制误差线,但要求略有不同。 因此,设置如下:

我正在比较10种不同参数设置中的3种不同方法。 因此,在y轴上,我有3种方法给出的模型拟合误差,在x轴上,我有不同的参数设置。

因此,对于每个参数设置,我想获得与这三种方法相对应的3个误差线图。 理想情况下,我想绘制每个参数设置的95%置信区间以及每种方法的最小值和最大值。

一些示例数据可以模拟为:

parameters = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]
mean_1 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5]
std_1 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5]

mean_2 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5]
std_1 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5]

mean_3 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5]
std_3 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5]

我将这些值保持不变,因为从绘图的角度来看,它没有任何改变。 我看到了matplotlib.errorbar方法,但是我不知道如何像在我的案例中那样在一个x轴值上将其扩展为多种方法。 另外,我不确定如何为每种方法添加[min, max]标记。

parameters列表作为x轴, mean_1作为y值, std_1作为误差,您可以使用

pylab.errorbar(parameters, mean_1, yerr=std_1, fmt='bo')

如果错误条不是对称的,即您具有lower_errupper_err ,则该语句将读取

pylab.errorbar(parameters, mean_1, yerr=[lower_err, upper_err], fmt='bo')

关键字xerr同样适用于x方向的错误,现在希望可以不言自明。 要显示几个(在您的情况下为3个)不同的数据集,可以采用以下方法:

# import pylab and numpy
import numpy as np
import pylab as pl

# define datasets
parameters = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]
mean_1 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5]
std_1 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5]

mean_2 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5]
std_2 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5]

mean_3 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5]
std_3 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5]


# here comes the plotting;
# to achieve a grouping, two things are extra here: 
# 1. Don't use line plot but circular markers and different marker color
# 2. slightly displace the datasets in x direction to avoid overlap 
#    and create visual grouping
pl.errorbar(np.array(parameters)-0.01, mean_1, yerr=std_1, fmt='bo')
pl.errorbar(parameters, mean_2, yerr=std_2, fmt='go')
pl.errorbar(np.array(parameters)+0.01, mean_3, yerr=std_3, fmt='ro')
pl.show()

这是关于pylab.errorbar的,您必须在其中明确给出错误。 一种替代方法是使用pylab.boxplot并为每个模型提供盒图,但是因此我想我需要每个模型每个参数的完整分布,而不仅仅是均值和标准差。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM