硬编码置信区间为条形图中的胡须

时间:2017-03-21 06:31:39

标签: python matplotlib scipy

所以我计算了一组具有正态分布的数据的置信区间,我想将其绘制为数据均值条形图上的胡须。我尝试对plt.bar使用yerr参数,但是它计算标准偏差而不是自信区间。我想在条形图上看到相同的胡须可视化。 我有自信的时间间隔:

[(29600.87,39367.28),  (37101.74,42849.60),  (33661.12,41470.25),  (46019.20,49577.80)]

这是我的代码,我尝试用自信的水平提供yerr参数,但确实运作得不好。

means=[np.mean(df.iloc[x]) for x in range(len(df.index))]

CI=[st.t.interval(0.95, len(df.iloc[x])-1, loc=np.mean(df.iloc[x]), scale=st.sem(df.iloc[x])) for x in range(len(df.index))]

plt.figure()

plt.bar(x_axis, means, color='r',yerr=np.reshape(CI,(2,4))

plt.xticks(np.arange(1992,1996,1))

这是我得到的情节:

enter image description here

2 个答案:

答案 0 :(得分:3)

以下应该做你想做的事情(假设你的错误是对称的;如果没有,那么你应该使用@IndanceanceOfBeingErnest的答案);情节看起来像这样:

enter image description here

使用一些内联注释生成它的代码:

import matplotlib.pyplot as plt

# rough estimates of your means; replace by your actual values
means = [34500, 40000, 37500, 47800]

# the confidence intervals you provided
ci = [(29600.87, 39367.28), (37101.74, 42849.60), (33661.12, 41470.25), (46019.20, 49577.80)]

# get the range of the confidence interval
y_r = [means[i] - ci[i][1] for i in range(len(ci))]
plt.bar(range(len(means)), means, yerr=y_r, alpha=0.2, align='center')
plt.xticks(range(len(means)), [str(year) for year in range(1992, 1996)])
plt.show()

答案 1 :(得分:1)

yerr的{​​{1}}参数可用于将错误绘制为错误栏。误差被定义为与某个值的偏差,即通常以bar的形式给出数量。这意味着置信区间为y ± err 这可以倒置;给定置信区间(y-err, y+err)和值(a, b),错误将为yy-a

在matplotlib条形图中,错误格式可以是b-y。由于我们无法知道prehands是否scalar | N, Nx1 or 2xN array-like值在区间内是对称的,并且因为它对于不同的实现(条形)可能是不同的,所以我们需要在此处选择y - 格式。

下面的代码说明了如何做到这一点。

2 x N

enter image description here