Wie zeichne ich vertikale Linien auf einem bestimmten Plot in matplotlib?
259
Wie zeichnet man bei einer Darstellung des Signals in der Zeitdarstellung Linien, die den entsprechenden Zeitindex markieren?
Insbesondere möchte ich bei einem Signaldiagramm mit einem Zeitindex von 0 bis 2,6 (s) vertikale rote Linien zeichnen, die den entsprechenden Zeitindex für die Liste angeben. [0.22058956, 0.33088437, 2.20589566]Wie kann ich das tun?
Die Standardmethode zum Hinzufügen vertikaler Linien, die Ihr gesamtes Plotfenster abdecken, ohne dass Sie deren tatsächliche Höhe angeben müssen, ist plt.axvline
import matplotlib.pyplot as plt
plt.axvline(x=0.22058956)
plt.axvline(x=0.33088437)
plt.axvline(x=2.20589566)
ODER
xcoords =[0.22058956,0.33088437,2.20589566]for xc in xcoords:
plt.axvline(x=xc)
Sie können für andere Plot - Befehle zur Verfügung viele der Schlüsselwörter (zB color, linestyle, linewidth...). Sie können Schlüsselwortargumente übergeben yminund ymaxwenn Sie möchten ymin=0.25, in Achsen korridieren (z. B. ymax=0.75wird die mittlere Hälfte des Diagramms abgedeckt). Es gibt entsprechende Funktionen für horizontale Linien ( axhline) und Rechtecke ( axvspan).
Aber wie zeichne ich die Linie auf einem bestimmten Achsenobjekt?
Eric
8
@ Eric wenn axdas Objekt ist, dann ax.axvline(x=0.220589956)scheint es für mich zu funktionieren.
Joel
Die Argumente für axvline sind relativ zum Plotfenster von 0 bis 1 skalar. Wie zeichnet man eine Linie an einer bestimmten x- oder y-Position, z. B. 2.205 ... die in dieser Frage gestellt wurde?
Bitte beachten Sie, dass ymax und ymin zwischen 0 und 1 liegen sollten, wobei 0 der untere Rand des Diagramms und 1 der obere Rand des Diagramms ist. Wenn Sie Werte außerhalb dieses Bereichs verwenden, müssen Sie die y-Positionen mit dem richtigen Verhältnis übersetzen.
Dylan Kapp
50
Für mehrere Zeilen
xposition =[0.3,0.4,0.45]for xc in xposition:
plt.axvline(x=xc, color='k', linestyle='--')
@CharlieParker Eine zusätzliche Option label='label'erledigt die Arbeit, aber Sie müssen plt.legend([options])später anrufen
kon psych
29
Wenn jemand ein legendund / oder colorseinige vertikale Linien hinzufügen möchte, verwenden Sie Folgendes :
import matplotlib.pyplot as plt# x coordinates for the lines
xcoords =[0.1,0.3,0.5]# colors for the lines
colors =['r','k','b']for xc,c in zip(xcoords,colors):
plt.axvline(x=xc, label='line at x = {}'.format(xc), c=c)
plt.legend()
plt.show()
Zusätzlich zu plt.axvlineund und plt.plot((x1, x2), (y1, y2))OR, plt.plot([x1, x2], [y1, y2])wie in den obigen Antworten angegeben, kann man auch verwenden
plt.vlines(x_pos, ymin=y1, ymax=y2)
um eine vertikale Linie zu zeichnen, x_posdie sich von y1bis zu y2den Werten erstreckt y1und y2in absoluten Datenkoordinaten liegt.
ax
das Objekt ist, dannax.axvline(x=0.220589956)
scheint es für mich zu funktionieren.plt.plot((x1,x2),(y1,y2))
Für mehrere Zeilen
quelle
label='label'
erledigt die Arbeit, aber Sie müssenplt.legend([options])
später anrufenWenn jemand ein
legend
und / odercolors
einige vertikale Linien hinzufügen möchte, verwenden Sie Folgendes :Ergebnisse:
quelle
Das Aufrufen von axvline in einer Schleife, wie andere vorgeschlagen haben, funktioniert, kann aber deshalb unpraktisch sein
Stattdessen können Sie die folgenden praktischen Funktionen verwenden, mit denen alle Linien als ein einziges Plotobjekt erstellt werden:
quelle
Zusätzlich zu
plt.axvline
und undplt.plot((x1, x2), (y1, y2))
OR,plt.plot([x1, x2], [y1, y2])
wie in den obigen Antworten angegeben, kann man auch verwendenum eine vertikale Linie zu zeichnen,
x_pos
die sich vony1
bis zuy2
den Werten erstreckty1
undy2
in absoluten Datenkoordinaten liegt.quelle