gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:34:59 25 4
gpt4 key购买 nike

我有一个图,我在图中以不同的颜色显示最大和最小点。由于情节是动态的,有时文本会出现在 ytick labels 的顶部,这看起来不太好。我想保留 ytick 的,所以我想把文字放在情节中。
但是我的 x 轴是 datetime 变量,因此提供了 firstsecond xtick< 之间的 x,y 位置 让我失望了。

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

基于 documentation我也试过 axis coords (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()

编辑 1
现在的样子(真实剧情中)-
enter image description here
预期结果 - enter image description here

最佳答案

使用混合坐标系的想法是正确的。您可以将文本放置在数据坐标中的 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")

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

ax.text(0.01, show_point, show_point, color="red", transform=ax.get_yaxis_transform(),
ha="left", va="bottom")

关于python - 在matplotlib中使用数据坐标时如何使y轴文本出现在图中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60910412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com