web-dev-qa-db-fra.com

Création d'étiquettes où la ligne apparaît dans la figure matplotlib

J'ai une figure créée dans matplotlib (données de séries chronologiques) sur laquelle sont une série de

matplotlib.pyplot.axvline

lignes. Je voudrais créer des étiquettes sur l'intrigue qui apparaissent à proximité (probablement sur la RHS de la ligne et vers le haut de la figure) de ces lignes verticales.

33
tripkane

Vous pouvez utiliser quelque chose comme

plt.axvline(10)
plt.text(10.1,0,'blah',rotation=90)

vous devrez peut-être jouer avec les valeurs x et y dans text pour l'aligner correctement. Vous pouvez trouver la documentation plus complète ici .

55
Dan

Une solution sans placement manuel consiste à utiliser des "transformations mixtes".

Transformations transformer les coordonnées d'un système de coordonnées à un autre. En spécifiant une transformation via le paramètre transform de text , vous pouvez donner les coordonnées x et y du texte dans le système de coordonnées de l'axe (allant de 0 à 1 de gauche à droite/de haut en bas des axes x/y, respectivement). Avec transformations mixtes , vous pouvez utiliser un système de coordonnées mixtes.

C'est exactement ce dont vous avez besoin: vous avez la coordonnée x donnée par les données et vous voulez placer le texte sur les axes y quelque part par rapport à l'axe, disons au centre. Le code pour ce faire ressemble à ceci:

import matplotlib.transforms as transforms
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

# the x coords of this transformation are data, and the
# y coord are axes
trans = transforms.blended_transform_factory(
    ax.transData, ax.transAxes)

x = 10
ax.axvline(x)
plt.text(x, .5, 'hello', transform=trans)

plt.show()
2
ingomueller.net