Python boxplot显示均值和置信区间

时间:2015-07-27 02:15:28

标签: python matplotlib

如何在Python中创建如下图所示的箱形图?我想仅描绘手段和置信区间(而不是像在matplotlib boxplot中那样的IQR比例)。

example

我没有任何版本限制,如果你的答案有一些包依赖性也可以。谢谢!

2 个答案:

答案 0 :(得分:1)

请改用errorbar。这是一个最小的例子:

import matplotlib.pyplot as plt

x = [2, 4, 3]
y = [1, 3, 5]
errors = [0.5, 0.25, 0.75]

plt.figure()
plt.errorbar(x, y, xerr=errors, fmt = 'o', color = 'k')
plt.yticks((0, 1, 3, 5, 6), ('', 'x3', 'x2', 'x1','')) 

enter image description here

请注意,boxplot不是正确的做法; conf_intervals参数仅控制盒子上凹口的位置(我们也不想要盒子,更不用说带凹口的盒子)。除了作为IQR的功能外,没有办法定制胡须。

答案 1 :(得分:1)

感谢美国,我提出了一种使这种图形自动化的方法。

下面的代码示例根据均值= 0.25和std = 0.1的正态分布生成20个数组。 我使用公式W = t * s / sqrt(n)来计算置信区间的误差范围,其中t是t分布中的常数(请参见scipy.stats.t),s是标准偏差,n是数组中值的数量。

list_samples=list() # making a list of arrays
for i in range(20):
    list.append(np.random.normal(loc=0.25, scale=0.1, size=20))

def W_array(array, conf=0.95): # function that returns W based on the array provided
    t = stats.t(df = len(array) - 1).ppf((1 + conf) /2)
    W = t * np.std(array, ddof=1) / np.sqrt(len(array))
    return W # the error

W_list = list()
mean_list = list()
for i in range(len(list_samples)):
    W_list.append(W_array(list_samples[i])) # makes a list of W for each array
    mean_list.append(np.mean(list_samples[i])) # same for the means to plot

plt.errorbar(x=mean_list, y=range(len(list_samples)), xerr=W_list, fmt='o', color='k')
plt.axvline(.25, ls='--') # this is only to demonstrate that 95%
                          # of the 95% CI contain the actual mean
plt.yticks([])
plt.show();

resulting figure