Como fazer texto do eixo y aparecem dentro da trama, enquanto usando coordenadas de dados em matplotlib?

jar:

Eu tenho um enredo onde eu exibir os pontos máximos e mínimos na trama em cores diferentes. Desde o enredo é dinâmica, por vezes, o texto aparece bem em cima das ytick etiquetas que não parece bom. Eu quero manter os ytick's, então eu pensei em colocar o texto dentro do enredo.
No entanto meu eixo x é datetimevariável, proporcionando assim a posição x, y que está entre o primeiro e o segundo xtick é me jogando fora.

Eu tentei a solução aqui , mas a sua para o eixo inteiro.

Com base na documentação Tentei eixo coords (0,0 é inferior esquerda e 1,1 é superior direito) também, mas o problema é que sua difícil chegar a uma posição de pixel apropriada que é dentro e parte superior do linhas horizontais. Além disso eu acho que seria difícil manter desde que os dados muda todos os dias.

Eu gostaria de ficar com coordenadas de dados , pois os dados é dinâmica.
É possível fazê-lo através de coordenadas de dados?

Por favor, use o código a seguir eu preparei para a minha situação -

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()

EDIT 1
O que parece que agora (na trama real) - resultado esperado -
digite descrição da imagem aqui
digite descrição da imagem aqui

William Miller:

Você pode evitar todo o material transformação de eixo enquanto ainda estiver trabalhando em coordenadas de dados se você usar matplotlib.axes.Axes.annotate, algo como isto

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

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')
ax.annotate(show_point, [ax.get_xticks()[0], show_point], va='bottom', 
            ha='right', color='red')

show_point2 = 1.7
ax.axhline(show_point2, ls='dotted')
ax.annotate(show_point2, [ax.get_xticks()[0], show_point2], va='bottom', 
            ha='right', color='red')

plt.show()

Isto produzirá

digite descrição da imagem aqui

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=365207&siteId=1
Recomendado
Clasificación