在matplotlib中使用数据坐标时如何使y轴文本出现在图中?

jar*_*jar 3 python plot matplotlib python-3.x seaborn

我有一个图,我用不同的颜色显示图中的最大值和最小值。由于绘图是动态的,有时文本会出现在ytick 标签的正上方,这看起来不太好。我想保留ytick's,所以我想把文本放在情节中。
但是我的 x 轴是datetime可变的,所以提供第一个第二个 之间的 x,y 位置让xtick我失望。

我在这里尝试了解决方案但它适用于整个轴。

根据文档,我也尝试了轴坐标(0,0 是左下角,1,1 是右上角),但问题是它很难想出一个合适的像素位置,既在内部又在顶部水平线。而且我认为由于数据每天都在变化,因此很难维护

我想坚持数据坐标,因为数据是动态的。
是否可以使用数据坐标来做到这一点?

请使用我为我的情况编造的以下代码 -

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.transforms as transforms

x = ['2020-03-01', '2020-03-02', '2020-03-03', '2020-03-04', '2020-03-05']
y = [1,2,3,4,5.8]
df = pd.DataFrame({'X': x, 'Y': y})

fig, ax = plt.subplots()
sns.lineplot(x='X', y='Y', data=df)
show_point = 5.7
ax.axhline(show_point, ls='dotted')
trans = transforms.blended_transform_factory(ax.get_yticklabels()[0].get_transform(), ax.transData)
ax.text('2020-03-01', show_point, color="red", s=show_point, transform=trans, ha="right", va="bottom")

show_point2 = 1.7
ax.axhline(show_point2, ls='dotted')
trans = transforms.blended_transform_factory(ax.get_yticklabels()[0].get_transform(), ax.transAxes)
ax.text(0.05, 0.15, color="red", s=show_point2, transform=trans, ha="center", va="bottom")

plt.show()
Run Code Online (Sandbox Code Playgroud)

编辑 1
现在的样子(在实际情节中)-
在此处输入图片说明
预期结果 - 在此处输入图片说明

Imp*_*est 6

使用混合坐标系的想法是正确的。您可以将文本放置在数据坐标中的 y 坐标和轴坐标中的 x 坐标处。

trans = transforms.blended_transform_factory(ax.transAxes, ax.transData)
ax.text(0.01, show_point, show_point, color="red", transform=trans, ha="left", va="bottom")
Run Code Online (Sandbox Code Playgroud)

这个特殊的混合变换甚至是内置的,所以你也可以使用

ax.text(0.01, show_point, show_point, color="red", transform=ax.get_yaxis_transform(),
        ha="left", va="bottom") 
Run Code Online (Sandbox Code Playgroud)