linee verticali e orizzontali in matplotlib


122

Non capisco bene perché non riesco a creare linee orizzontali e verticali a limiti specificati. Vorrei legare i dati a questa casella. Tuttavia, le parti non sembrano rispettare le mie istruzioni. Perchè è questo?

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

inserisci qui la descrizione dell'immagine

Risposte:


166

Le funzioni pyplot che stai chiamando axhline()e axvline()disegnano linee che si estendono su una parte dell'intervallo dell'asse, indipendentemente dalle coordinate. I parametri xmino yminutilizzano il valore 0.0 come minimo dell'asse e 1.0 come massimo dell'asse.

Utilizzare invece plt.plot((x1, x2), (y1, y2), 'k-')per disegnare una linea dal punto (x1, y1) al punto (x2, y2) di colore k. Vedi pyplot.plot.


3
matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline <- documentazione. Dovresti modificare la tua risposta per includere questo link
tacaswell

15
Un'altra soluzione per tracciare linee orizzontali e verticali è usare hlineso vlines, rispettivamente, poiché è più banale di un normale plotimo
sodd

20

Questo può essere un problema comune per i nuovi utenti di Matplotlib per disegnare linee verticali e orizzontali. Per comprendere questo problema, dovresti essere consapevole del fatto che esistono diversi sistemi di coordinate in Matplotlib .

I metodi axhline e axvline vengono utilizzati per disegnare linee sulle coordinate degli assi . In questo sistema di coordinate, la coordinata per il punto in basso a sinistra è (0,0), mentre la coordinata per il punto in alto a destra è (1,1), indipendentemente dall'intervallo di dati del grafico. Sia il parametro xminche si xmaxtrovano nell'intervallo [0,1].

D'altra parte, il metodo hlines e vlines vengono utilizzati per disegnare linee alla coordinata dei dati . L'intervallo per xmine xmaxè compreso nell'intervallo del limite dati dell'asse x.

Facciamo un esempio concreto,

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

Produrrà la seguente trama: inserisci qui la descrizione dell'immagine

Il valore per xmine xmaxè lo stesso per il metodo axhlinee hlines. Ma la lunghezza della linea prodotta è diversa.


16

Se vuoi aggiungere un riquadro di delimitazione, usa un rettangolo:

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

Rectangle doc

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.