pionowe i poziome linie w matplotlib

122

Nie do końca rozumiem, dlaczego nie mogę tworzyć linii poziomych i pionowych w określonych granicach. Chciałbym powiązać dane tym polem. Jednak strony wydają się nie stosować się do moich instrukcji. Dlaczego to?

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

wprowadź opis obrazu tutaj

Rohit
źródło

Odpowiedzi:

166

Wywoływane funkcje pyplot axhline()i axvline()rysowanie linii obejmujących część zakresu osi, niezależnie od współrzędnych. Parametry xminlub yminużyj wartości 0,0 jako minimum osi i 1,0 jako maksimum osi.

Zamiast tego użyj, plt.plot((x1, x2), (y1, y2), 'k-')aby narysować linię od punktu (x1, y1) do punktu (x2, y2) w kolorze k. Zobacz pyplot.plot.

Bennett Brown
źródło
3
matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline <- dokumentacja. Powinieneś edytować swoją odpowiedź, aby zawierała ten link
tacaswell,
15
Innym rozwiązaniem do wykreślania linii poziomych i pionowych jest użycie odpowiednio hlineslub vlines, ponieważ jest to bardziej trywialne niż zwykłe plotimo
sodd
20

Może to być częstym problemem dla nowych użytkowników Matplotlib przy rysowaniu pionowych i poziomych linii. Aby zrozumieć ten problem, należy mieć świadomość, że w Matplotlib istnieją różne układy współrzędnych .

Metody axhline i axvline służą do rysowania linii w współrzędnych osi . W tym układzie współrzędnych współrzędna lewego dolnego punktu to (0,0), podczas gdy współrzędna prawego górnego punktu to (1,1), niezależnie od zakresu danych na wykresie. Zarówno parametr, jak xmini xmaxmieszczą się w zakresie [0,1].

Z drugiej strony linie i linie metody są używane do rysowania linii we współrzędnej danych . Zakresy xmini xmaxmieszczą się w zakresie limitu danych osi x.

Weźmy konkretny przykład,

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

Stworzy następujący wykres: wprowadź opis obrazu tutaj

Wartości xmini xmaxsą takie same dla metody axhlinei hlines. Ale długość produkowanej linii jest inna.

jdhao
źródło
16

Jeśli chcesz dodać obwiednię, użyj prostokąta:

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

Rectangle doc

tacaswell
źródło