[英]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_err
和upper_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.