matplotlib - matplotlib条形图中极限处的误差线

标签 matplotlib bar-chart errorbar

我试图让误差条显示在置信区间的限制处,而不是在中心。

我想要的是这个:

enter image description here

但我得到的是:

enter image description here

为了绘制条形图,我使用了这个:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(12345)

df = pd.DataFrame([np.random.normal(32000,200000,3650), 
                   np.random.normal(43000,100000,3650), 
                   np.random.normal(43500,140000,3650), 
                   np.random.normal(48000,70000,3650)], 
                  index=[1992,1993,1994,1995])
df1 = df.T
df1.columns = ['1992', '1993','1994','1995']
a = df1.describe()
means = a.loc['mean'].values.tolist()
stdevs = a.loc['std'].values.tolist()
counts = a.loc['count'].values.tolist()
index = np.arange(len(df1.columns))

CI = []
for i in range(len(means)):
    CIval = 1.96*stdevs[i]/(counts[i]**(0.5))
    CI.append(CIval)

#print(means, CI)

plt.figure()
fig, ax = plt.subplots(figsize=(10,10))
ax.set_xticks(index)
ax.set_xticklabels(df1.columns)

plt.bar(index, means, xerr = 0.1, yerr=CI)
plt.tight_layout()
plt.show()

最佳答案

误差条按预期显示。您已为 x 错误设置了 0.1 值,但是在您的预期结果图像中,没有 x 错误栏,因此我们可以将其删除。其次,我们可以增加capsize您的误差线,以便使用 capsize= 实际上可以看到它们在调用 plt.bar() :

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(12345)

df = pd.DataFrame([np.random.normal(32000,200000,3650),
                   np.random.normal(43000,100000,3650),
                   np.random.normal(43500,140000,3650),
                   np.random.normal(48000,70000,3650)],
                  index=[1992,1993,1994,1995])
df1 = df.T
df1.columns = ['1992', '1993','1994','1995']
a = df1.describe()
means = a.loc['mean'].values.tolist()
stdevs = a.loc['std'].values.tolist()
counts = a.loc['count'].values.tolist()
index = np.arange(len(df1.columns))

CI = []
for i in range(len(means)):
    CIval = 1.96*stdevs[i]/(counts[i]**(0.5))
    CI.append(CIval)

fig, ax = plt.subplots(figsize=(10,10))
ax.set_xticks(index)
ax.set_xticklabels(df1.columns)

plt.bar(index, means, yerr=CI, capsize=10)
plt.tight_layout()
plt.show()

enter image description here

关于matplotlib - matplotlib条形图中极限处的误差线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50330998/

相关文章:

python - 迭代 Pandas 数据帧,同时跳过第一行

python - 在 cv2 中使用 skimage 图像

python - 带有单个子图的 Matplotlib

r - ggplot2 - 堆叠/躲避条形图

javascript - 如何计算一个值并将其放置在 Chart.JS 条形图中的最后一个条形内?

R/ggplot 2 - 使用 Facet_grid 和 geom histogram/errorbar 处理不均匀的组大小

python - 在第二台显示器上更新/刷新 matplotlib 图

android - 如何在 x 轴的左侧放置空间并显示条形图?

python - Matplotlib 非对称 yerr 方式偏离

r - 使用堆叠条形图时,ggplot2 条形图带有误差条