python ylim 不同时的子图文本位置

python subplot text location when ylim is different

当这些图形具有不同的 ylim 时,我想在多个子图图形中添加文本。

我想在每个子图中添加完全相同的文本。

但是,问题是每个子图都有不同的 y 轴范围。

我的原代码是这样的,

    fig = plt.figure(figsize=(20,20))


ax1 = fig.add_subplot(2,3,1)
ax2 = fig.add_subplot(2,3,2)
ax3 = fig.add_subplot(2,3,3)
ax4 = fig.add_subplot(2,3,4)
ax5 = fig.add_subplot(2,3,5)
ax6 = fig.add_subplot(2,3,6)

sns.lineplot( x = 'date',
            y = 'wage',
            data = epi_raw_occ_2018_private[epi_raw_occ_2018_private['docc03']==1],
            label = 'Management occupations',
            ax=ax1)

ax1.axvline(dt.datetime(2020, 3, 1),linewidth=0.5, color='k',linestyle='--')

sns.lineplot( x = 'date',
            y = 'wage',
            data = epi_raw_occ_2018_private[epi_raw_occ_2018_private['docc03']==2],
            label = 'Business and financial operations occupations',
            ax=ax2)

ax2.axvline(dt.datetime(2020, 3, 1),linewidth=0.5, color='k',linestyle='--')


sns.lineplot( x = 'date',
            y = 'wage',
            data = epi_raw_occ_2018_private[epi_raw_occ_2018_private['docc03']==3],
            label = 'Computer and mathematical science occupations',
            ax=ax3)

ax3.axvline(dt.datetime(2020, 3, 1),linewidth=0.5, color='k',linestyle='--')

这是我的数据框示例

epi_raw_occ_2018_private[['date','wage','docc03']]

epi_raw_occ_2018_private:
date          wage        docc03
200206         40           1
200207         50           1
200208         60           1
.
.
.
200206         30           2
200207         30           2
200208         40           2
.
.
.
200206         10           3
200207         10           3
200208         20           3
.

我正在根据每个 Mocc 类别绘制工资图。但是,由于每个类别的最高和最低工资点不同,所以很难把文字放在我想要的地方。

有什么办法可以解决这个问题吗?

提前致谢

使用批注调整文字批注的显示位置。如果您指定 0 到 1 范围内的值,则基于图形的左下角,无论 y 轴值如何,它都将显示在相同的位置。看这里了解更多 details.

fig = plt.figure(figsize=(20,20))

ax1 = fig.add_subplot(2,3,1)
ax2 = fig.add_subplot(2,3,2)
ax3 = fig.add_subplot(2,3,3)

sns.lineplot( x = 'date',
            y = 'wage',
            data = df[df['docc03']==1],
            label = 'Management occupations',
            ax=ax1)
ax1.axvline(dt.datetime(2020, 3, 1),linewidth=0.5, color='k',linestyle='--')
ax1.annotate('text', (0.8, 0.1), xycoords='axes fraction', fontsize=18, fontweight='bold')
sns.lineplot( x = 'date',
            y = 'wage',
            data = df[df['docc03']==2],
            label = 'Business and financial operations occupations',
            ax=ax2)
ax2.axvline(dt.datetime(2020, 3, 1),linewidth=0.5, color='k',linestyle='--')
ax2.annotate('text', (0.8, 0.1), xycoords='axes fraction', fontsize=18, fontweight='bold')

sns.lineplot( x = 'date',
            y = 'wage',
            data = df[df['docc03']==3],
            label = 'Computer and mathematical science occupations',
            ax=ax3)
ax3.axvline(dt.datetime(2020, 3, 1),linewidth=0.5, color='k',linestyle='--')
ax3.annotate('text', (0.8, 0.1), xycoords='axes fraction', fontsize=18, fontweight='bold')
plt.show()