lignes verticales et horizontales dans matplotlib

122

Je ne comprends pas très bien pourquoi je suis incapable de créer des lignes horizontales et verticales à des limites spécifiées. Je voudrais lier les données par cette boîte. Cependant, les côtés ne semblent pas respecter mes instructions. Pourquoi est-ce?

# CREATING A BOUNDING BOX
# BOTTOM HORIZONTAL
plt.axhline(y=.4, xmin=0.25, xmax=0.402, linewidth=2, color = 'k')
# RIGHT VERTICAL
plt.axvline(x=0.402, ymin=0.4, ymax = 0.615, linewidth=2, color='k')
# LEFT VERTICAL
plt.axvline(x=0.1, ymin=0.58, ymax = 0.79, linewidth=2, color='k')
plt.show()

entrez la description de l'image ici

Rohit
la source

Réponses:

166

Les fonctions pyplot que vous appelez axhline()et axvline()dessinez des lignes qui couvrent une partie de la plage d'axes, quelles que soient les coordonnées. Les paramètres xminou yminutilisent la valeur 0.0 comme minimum de l'axe et 1.0 comme maximum de l'axe.

À la place, utilisez plt.plot((x1, x2), (y1, y2), 'k-')pour tracer une ligne du point (x1, y1) au point (x2, y2) en couleur k. Voir pyplot.plot.

Bennett Brown
la source
3
matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline <- documentation. Vous devriez modifier votre réponse pour inclure ce lien
tacaswell
15
Une autre solution pour tracer des lignes horizontales et verticales consiste à utiliser hlinesou vlines, respectivement, car c'est plus trivial qu'un plotimo ordinaire
sodd
20

Cela peut être un problème courant pour les nouveaux utilisateurs de Matplotlib pour dessiner des lignes verticales et horizontales. Afin de comprendre ce problème, vous devez être conscient que différents systèmes de coordonnées existent dans Matplotlib .

Les méthodes axhline et axvline sont utilisées pour tracer des lignes aux coordonnées des axes . Dans ce système de coordonnées, la coordonnée du point inférieur gauche est (0,0), tandis que la coordonnée du point supérieur droit est (1,1), quelle que soit la plage de données de votre tracé. Les deux paramètres xminet xmaxsont dans la plage [0,1].

D'autre part, les méthodes hlines et vlines sont utilisées pour dessiner des lignes à la coordonnée des données . La plage pour xminet xmaxsont dans la plage de données limite de l'axe x.

Prenons un exemple concret,

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 100)
y = np.sin(x)

fig, ax = plt.subplots()

ax.plot(x, y)
ax.axhline(y=0.5, xmin=0.0, xmax=1.0, color='r')
ax.hlines(y=0.6, xmin=0.0, xmax=1.0, color='b')

plt.show()

Il produira l'intrigue suivante: entrez la description de l'image ici

La valeur de xminet xmaxest la même pour la méthode axhlineet hlines. Mais la longueur de la ligne produite est différente.

jdhao
la source
16

Si vous souhaitez ajouter un cadre de sélection, utilisez un rectangle:

ax = plt.gca()
r = matplotlib.patches.Rectangle((.5, .5), .25, .1, fill=False)
ax.add_artist(r)

Rectangle doc

Tacaswell
la source