在直方图上叠加箱线图或均值误差条

4

我正在使用Seaborn以一种相当标准的方式创建我的数据的直方图,即:

rc = {'font.size': 32, 'axes.labelsize': 28.5, 'legend.fontsize': 32.0, 
    'axes.titlesize': 32, 'xtick.labelsize': 31, 'ytick.labelsize': 12}
sns.set(style="ticks", color_codes=True, rc = rc)
plt.figure(figsize=(25,20),dpi=300)

ax = sns.distplot(synData['SYNERGY_SCORE'])
print (np.mean(synData['SYNERGY_SCORE']), np.std(synData['SYNERGY_SCORE']))
# ax = sns.boxplot(synData['SYNERGY_SCORE'], orient = 'h') 

ax.set(xlabel = 'Synergy Score', ylabel = 'Frequency', title = 'Aggregate Synergy Score Distribution')

这将产生以下输出:标准直方图

我还希望在同一图上可视化该数据集的平均值+标准差,最好是通过在x轴上(或x轴正上方)放置一个表示平均值的点,并使用凹口误差线显示标准差。另一种选择是沿着x轴绘制一个盒形图。我尝试了只添加了被注释掉的代码行(sns.boxplot()),但它看起来非常丑陋,完全不符合我的要求。有什么建议吗?

1个回答

8

箱线图是在分类轴上绘制的,与直方图的密度轴不会很好地共存,但可以通过双x轴图来实现:

import numpy as np
import seaborn as sns
np.random.seed(2023)  # ensures reproducible data

x = np.random.randn(300)
ax = sns.distplot(x)
ax2 = ax.twinx()
sns.boxplot(x=x, ax=ax2)
ax2.set(ylim=(-.5, 10))

enter image description here


sns.distplot已弃用,请改用sns.histplot

ax = sns.histplot(x, kde=True, stat='density')
ax2 = ax.twinx()
sns.boxplot(x=x, ax=ax2)
ax2.set(ylim=(-.5, 10))

enter image description here


好的,谢谢。我能否使用自助式95%置信区间来制作箱线图,或者仅将平均值和标准差显示为带误差线的点,而不是制作箱线图? - r_movva
我已经使用了“notch”函数将95%置信区间添加到我的箱线图中。您应该能够使用Matplotlib函数进行修改。(1) https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.box。(2) https://matplotlib.org/examples/pylab_examples/boxplot_demo3.html。以下是如何使用它的示例代码:ax = sns.boxplot(x='VALUE-Y', y='VALUE-X', data=samples, notch=True)。 - Christer Edvardsson

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