问题描述
我一直在试图弄清楚如何向特定的子图添加统计显着性条。大多数相关问题都针对单个图,但没有显示如何向子图任意添加统计注释。有人可以告诉我如何将第 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()