向条形图子图添加统计显着性注释

问题描述

我一直在试图弄清楚如何向特定的子图添加统计显着性条。大多数相关问题都针对单个图,但没有显示如何向子图任意添加统计注释。有人可以告诉我如何将第 4 个子图中显示的类似统计注释添加到其他每个子图中吗?

这是我得到的代码和输出:

zero.columns= ['Number of Research Years','Total Publications','Publications During Residency','Publications Before & After Residency','H Index']

fig,axes = plt.subplots(2,2,sharex= False,sharey= True,figsize=(8,8))

ax1= sns.barplot(ax=axes[0,0],x= zero['Number of Research Years'],y= zero['Total Publications'])
ax2= sns.barplot(ax=axes[0,1],y= zero['Publications During Residency'])
ax3= sns.barplot(ax=axes[1,y= zero['Publications Before & After Residency'])
ax4= sns.barplot(ax=axes[1,y= zero['H Index'])

x1,x2 = 1,2   
y,h,col = 100,5,'k'
plt.plot([x1,x1,x2,x2],[y,y+h,y],lw=1.5,c=col)
plt.text((x1+x2)*.5,"*",ha='center',va='bottom',color=col)

x1,x2 = 0,2  
y,col = 120,color=col)

ax1.text(0.05,0.95,"A",fontweight="bold",transform=ax1.transAxes)
ax2.text(0.05,"B",transform=ax2.transAxes)
ax3.text(0.05,"C",transform=ax3.transAxes)
ax4.text(0.05,"D",transform=ax4.transAxes)


sns.despine()
plt.show()

The subplots that I have created so far

解决方法

您需要编写一个将 Axes 作为参数并使用 the OO-version of the functions 在该 Axes 对象上绘制的函数:

def annot_stat(star,x1,x2,y,h,col='k',ax=None):
    ax = plt.gca() if ax is None else ax
    ax.plot([x1,x2],[y,y+h,y],lw=1.5,c=col)
    ax.text((x1+x2)*.5,star,ha='center',va='bottom',color=col)

示例:

def annot_stat(star,color=col)
    
zero = pd.DataFrame({'Number of Research Years': [0,1,2],'Total Publications': 100*np.random.random(size=3),'Publications During Residency': 100*np.random.random(size=3),'Publications Before & After Residency': 100*np.random.random(size=3),'H Index': 10*np.random.random(size=3)})

fig,axes = plt.subplots(2,2,sharex= False,sharey= True,figsize=(8,8))

ax1= sns.barplot(ax=axes[0,0],x= zero['Number of Research Years'],y= zero['Total Publications'])
ax2= sns.barplot(ax=axes[0,1],y= zero['Publications During Residency'])
ax3= sns.barplot(ax=axes[1,y= zero['Publications Before & After Residency'])
ax4= sns.barplot(ax=axes[1,y= zero['H Index'])

ax1.text(0.05,0.95,"A",fontweight="bold",transform=ax1.transAxes)
ax2.text(0.05,"B",transform=ax2.transAxes)
ax3.text(0.05,"C",transform=ax3.transAxes)
ax4.text(0.05,"D",transform=ax4.transAxes)

annot_stat('*',100,5,ax=ax1)
annot_stat('***',120,ax=ax1)

annot_stat('*',ax=ax2)
annot_stat('***',ax=ax2)

annot_stat('*',ax=ax3)
annot_stat('***',ax=ax3)

annot_stat('***',10,ax=ax4)
annot_stat('*',20,ax=ax4)


sns.despine()
plt.show()

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...