líneas verticales y horizontales en matplotlib

122

No entiendo por qué no puedo crear líneas horizontales y verticales en los límites especificados. Me gustaría vincular los datos por este cuadro. Sin embargo, las partes no parecen cumplir con mis instrucciones. ¿Por qué es esto?

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

ingrese la descripción de la imagen aquí

Rohit
fuente

Respuestas:

166

Las funciones de pyplot que está llamando axhline()y axvline()dibujan líneas que abarcan una parte del rango del eje, independientemente de las coordenadas. Los parámetros xmino yminusan el valor 0.0 como mínimo del eje y 1.0 como máximo del eje.

En su lugar, utilice plt.plot((x1, x2), (y1, y2), 'k-')para dibujar una línea desde el punto (x1, y1) hasta el punto (x2, y2) en color k. Ver pyplot.plot.

Bennett Brown
fuente
3
matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline <- documentación. Debería editar su respuesta para incluir este enlace
tacaswell
15
Otra solución para trazar líneas horizontales y verticales es utilizar hlineso vlines, respectivamente, ya que esto es más trivial que un habitual plotimo
Sodd
20

Este puede ser un problema común para los nuevos usuarios de Matplotlib para dibujar líneas verticales y horizontales. Para comprender este problema, debe tener en cuenta que existen diferentes sistemas de coordenadas en Matplotlib .

Los métodos axhline y axvline se utilizan para dibujar líneas en las coordenadas de los ejes . En este sistema de coordenadas, la coordenada para el punto inferior izquierdo es (0,0), mientras que la coordenada para el punto superior derecho es (1,1), independientemente del rango de datos de su gráfico. Tanto el parámetro xmincomo xmaxestán en el rango [0,1].

Por otro lado, los métodos hlines y vlines se usan para dibujar líneas en la coordenada de datos . El rango para xminy xmaxestán en el rango de límite de datos del eje x.

Tomemos un ejemplo 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()

Producirá la siguiente trama: ingrese la descripción de la imagen aquí

El valor de xminy xmaxson los mismos para el método axhliney hlines. Pero la longitud de la línea producida es diferente.

jdhao
fuente
16

Si desea agregar un cuadro delimitador, use un rectángulo:

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

Rectangle Doc

Tacaswell
fuente