You need to write a function that takes an Axes
as an argument and use the OO-version of the functions to draw on that Axes object:
def annot_stat(star, x1, x2, y, h, col='k', ax=None):
ax = plt.gca() if ax is None else ax
ax.plot([x1, x1, x2, x2], [y, y+h, y+h, y], lw=1.5, c=col)
ax.text((x1+x2)*.5, y+h, star, ha='center', va='bottom', color=col)
example:
def annot_stat(star, x1, x2, y, h, col='k', ax=None):
ax = plt.gca() if ax is None else ax
ax.plot([x1, x1, x2, x2], [y, y+h, y+h, y], lw=1.5, c=col)
ax.text((x1+x2)*.5, y+h, star, ha='center', va='bottom', 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], x= zero['Number of Research Years'], y= zero['Publications During Residency'])
ax3= sns.barplot(ax=axes[1,0], x= zero['Number of Research Years'], y= zero['Publications Before & After Residency'])
ax4= sns.barplot(ax=axes[1,1], x= zero['Number of Research Years'], y= zero['H Index'])
ax1.text(0.05, 0.95, "A", fontweight="bold", transform=ax1.transAxes)
ax2.text(0.05, 0.95, "B", fontweight="bold", transform=ax2.transAxes)
ax3.text(0.05, 0.95, "C", fontweight="bold", transform=ax3.transAxes)
ax4.text(0.05, 0.95, "D", fontweight="bold", transform=ax4.transAxes)
annot_stat('*', 1, 2, 100, 5, ax=ax1)
annot_stat('***', 0, 2, 120, 5, ax=ax1)
annot_stat('*', 1, 2, 100, 5, ax=ax2)
annot_stat('***', 0, 2, 120, 5, ax=ax2)
annot_stat('*', 1, 2, 100, 5, ax=ax3)
annot_stat('***', 0, 2, 120, 5, ax=ax3)
annot_stat('***', 1, 2, 10, 5, ax=ax4)
annot_stat('*', 0, 2, 20, 5, ax=ax4)
sns.despine()
plt.show()