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()
当这些图形具有不同的 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()