繁体   English   中英

是否可以在 seaborn barplot 上输入置信区间/误差条的值?

[英]Is it possible to input values for confidence interval/ error bars on seaborn barplot?

我习惯于在 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

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

当我做:

ax = sns.barplot('month','mean',data=df, ci=None)

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

这个图形

当我尝试像这样使用 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']))

一切都搞砸了,只是图中丢失了一条奇怪的线:

喜欢这个图形

我使用错误栏错误吗? 有没有更好的工具来解决这个问题?

更新(2019 年 8 月 2 日):

我之前的回答(见下文)夸大了错误,因为如果传递单个形状数组 (N,), yerr对顶部和底部使用相同的错误。 要获得底部和顶部的不同误差,我们需要使用形状为 (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')

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

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

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

在此处输入图片说明

较早的答案与夸大的错误

seabornmatplotlib对月份的解释不同,导致误差线的位置很奇怪。 您还需要指定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')

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM