如何在Python中创建如下图所示的箱形图?我想仅描绘手段和置信区间(而不是像在matplotlib boxplot中那样的IQR比例)。
我没有任何版本限制,如果你的答案有一些包依赖性也可以。谢谢!
答案 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',''))
请注意,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();