vertikale und horizontale Linien in Matplotlib

122

Ich verstehe nicht ganz, warum ich an bestimmten Grenzen keine horizontalen und vertikalen Linien erstellen kann. Ich möchte die Daten durch dieses Feld binden. Die Seiten scheinen jedoch meinen Anweisungen nicht zu entsprechen. Warum ist das?

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

Geben Sie hier die Bildbeschreibung ein

Rohit
quelle

Antworten:

166

Die pyplot Funktionen Sie anrufen, axhline()und axvline()Zeichnen von Linien , die einen Teil des Achsenbereich überspannen, und zwar unabhängig von Koordinaten. Die Parameter xminoder yminverwenden den Wert 0.0 als Minimum der Achse und 1.0 als Maximum der Achse.

plt.plot((x1, x2), (y1, y2), 'k-')Zeichnen Sie stattdessen eine Linie vom Punkt (x1, y1) zum Punkt (x2, y2) in Farbe k. Siehe pyplot.plot.

Bennett Brown
quelle
3
matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axhline <- Dokumentation. Sie sollten Ihre Antwort bearbeiten, um diesen Link aufzunehmen
Tacaswell
15
Eine andere Lösung zum Zeichnen horizontaler und vertikaler Linien ist die Verwendung von hlinesbzw. vlines, da dies trivialer ist als ein regulärer plotImo
Sodd
20

Dies kann ein häufiges Problem für neue Benutzer von Matplotlib sein, vertikale und horizontale Linien zu zeichnen. Um dieses Problem zu verstehen, sollten Sie sich bewusst sein, dass in Matplotlib unterschiedliche Koordinatensysteme existieren .

Das Verfahren axhline und axvline werden verwendet Linien an den ziehen Koordinatenachsen . In diesem Koordinatensystem beträgt die Koordinate für den unteren linken Punkt (0,0), während die Koordinate für den oberen rechten Punkt (1,1) ist, unabhängig vom Datenbereich Ihres Diagramms. Sowohl der Parameter xminals auch xmaxliegen im Bereich [0,1].

Auf der anderen Seite, Methode hlines und vlines verwenden Linien an den ziehen Koordinatendaten . Der Bereich für xminund xmaxliegt im Bereich der Datengrenze der x-Achse.

Nehmen wir ein konkretes Beispiel:

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

Es wird das folgende Diagramm erstellt: Geben Sie hier die Bildbeschreibung ein

Der Wert für xminund xmaxist für die Methode axhlineund gleich hlines. Die Länge der produzierten Linie ist jedoch unterschiedlich.

jdhao
quelle
16

Wenn Sie einen Begrenzungsrahmen hinzufügen möchten, verwenden Sie ein Rechteck:

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

Rectangle doc

Tacaswell
quelle