是否可以在Seabar小节上输入置信区间/误差条的值?

Car*_*ina 3 python pandas seaborn

我习惯于在seaborn上进行条形图绘制,并且我喜欢用它来显示置信度条的布局,但是在数据集中有一个特例,我已经有了置信度区间,如下所示:

month   ci-b     mean    ci-t
201801  0.020   0.0206  0.021
201802  0.019   0.0198  0.0204
201803  0.022   0.0225  0.0228
201804  0.022   0.0236  0.0240
201805  0.023   0.0235  0.0239
Run Code Online (Sandbox Code Playgroud)

有没有办法手动输入seaborn置信区间线的值?或将其用作“无”并使用一些matlib函数将置信区间放入图形中(但保留seaborn的小节)

当我做:

ax = sns.barplot('month','mean',data=df, ci=None)
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我得到了一个正常的条形图:

此图

当我尝试使用matlib的错误栏时,如下所示:

ax = sns.barplot('month','mean',data=df, ci=None)
plt.errorbar(x=df['month'],y=df['mean'],yerr=(df['ci-t']-df['ci-b']))
Run Code Online (Sandbox Code Playgroud)

一切变得混乱,图中只丢失了一条奇怪的线:

喜欢这张图

我是否使用错误栏错误?有更好的工具吗?

wil*_*llk 5

更新(2019年8月2日):

我先前的答案(请参阅下文)夸大了该错误,因为yerr如果传递单个形状(N,)数组,则顶部和底部将使用相同的错误。为了获得底部和顶部的不同错误,我们需要使用形状(2,N)的数组。第一行用于显示底部错误,第二行用于显示顶部错误(来自文档。在代码中,这是:

# Bottom error, then top
yerr = [df['mean']-df['ci-b'], df['ci-t'] - df['mean']]

ax = sns.barplot('month','mean',data=df, ci=None)
plt.errorbar(x=[0, 1, 2, 3, 4],y=df['mean'],
            yerr=yerr, fmt='none', c= 'r')
Run Code Online (Sandbox Code Playgroud)

结果如下: 在此处输入图片说明

现在,底部和顶部的错误有所不同。

以下是直接比较,原始(对称)误差线用红色表示,非对称误差线用蓝色表示。我们可以直接看到差异:

在此处输入图片说明

夸张错误的早期答案

对月份的理解不同,seaborn并且matplotlib导致误差条的位置奇怪。您还需要指定fmt='none'避免将errorbar打印数据点作为一条线。以下代码将误差线放置在正确的x位置:

ax = sns.barplot('month','mean',data=df, ci=None)
plt.errorbar(x=[0, 1, 2, 3, 4],y=df['mean'],
             yerr=(df['ci-t']-df['ci-b']), fmt='none', c= 'r')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明