使用Seaborn绘制指定置信区间的条形图

3
我希望在 Seaborn 条形图上绘制置信区间,但我已经计算出了置信区间。如何让 Seaborn 绘制我的置信区间而不是尝试自己计算?例如,假设我有以下 pandas DataFrame:
   x = pd.DataFrame([
        ['Group 1', 0.5, 0.05],
        ['Group 1', 0.6, 0.07],
    ], columns=['Group', 'Mean', 'SD'])

我该如何使用这些平均值和标准偏差绘制条形图?
1个回答

4
你可以使用seaborn绘制没有误差线的条形图,然后使用matplotlib的errorbar添加误差线。下面的代码假设'Group'列包含两个不同的值:
from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd

x = pd.DataFrame([
    ['Group 1', 0.5, 0.05],
    ['Group 2', 0.6, 0.07],
], columns=['Group', 'Mean', 'SD'])

ax = sns.barplot(data=x, x='Group', y='Mean', color='dodgerblue')
ax.errorbar(data=x, x='Group', y='Mean', yerr='SD', ls='', lw=3, color='black')
plt.show()

带自定义误差条的 Seaborn 条形图

这是一个嵌套条形图的尝试。首先绘制误差条以获得其标准位置,然后提取 x 坐标。接着移除条形图并使用新位置重新创建。不确定在所有情况下是否都有效。

from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

x = pd.DataFrame([
    ['Group 1', 'A', 0.4, 0.08],
    ['Group 1', 'B', 0.5, 0.05],
    ['Group 1', 'C', 0.5, 0.02],
    ['Group 2', 'A', 0.6, 0.07],
    ['Group 2', 'B', 0.7, 0.09],
    ['Group 2', 'C', 0.7, 0.02],
    ['Group 3', 'A', 0.6, 0.07],
    ['Group 3', 'B', 0.2, 0.09],
    ['Group 3', 'C', 0.4, 0.11],
], columns=['Group', 'Subgroup', 'Mean', 'SD'])

num_hues = len(np.unique(x['Subgroup']))
ax = sns.barplot(data=x, x='Group', y='Mean', hue='Subgroup')
for (hue, df_hue), dogde_dist in zip(x.groupby('Subgroup'), np.linspace(-0.4, 0.4, 2 * num_hues + 1)[1::2]):
    bars = ax.errorbar(data=df_hue, x='Group', y='Mean', yerr='SD', ls='', lw=3, color='black')
    xys = bars.lines[0].get_xydata()
    bars.remove()
    ax.errorbar(data=df_hue, x=xys[:, 0] + dogde_dist, y='Mean', yerr='SD', ls='', lw=3, color='black')
plt.show()

nested barplot with custom errorbars


1
对于像这种未嵌套的条形图,你实际上可以直接通过 barplotyerr=x["SD"] 参数传递错误值。(在这个例子中,你需要传递向量,而不是像你在这个例子中所做的那样传递对 data 的引用)。但是对于嵌套的条形图,情况会变得更加复杂,不幸的是。 - mwaskom
@RylanSchaeffer 这是sns.barplot(data=x, x='Group', y='Mean', yerr=x['SD']) - JohanC
我明白你说的非嵌套的酒吧是什么意思。该死。 - Rylan Schaeffer
@JohanC,你有一个可以嵌套的条形图的例子吗?我意识到我实际上需要嵌套的条形图。 - Rylan Schaeffer
如果您更喜欢在那里回答的话,我可以在这里再发一个问题。 - Rylan Schaeffer
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接