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í

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.


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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.