491 Stimmen

Wie man vertikale Linien auf einem gegebenen Plot zeichnet

Angesichts eines Diagramms eines Signals in der Zeitdarstellung, wie kann ich Linien zeichnen, die den entsprechenden Zeitindex markieren?

Insbesondere möchte ich bei einem Signalplot mit einem Zeitindex von 0 bis 2,6 (Sekunden) vertikale rote Linien zeichnen, die den entsprechenden Zeitindex für die Liste [0,22058956, 0,33088437, 2,20589566] anzeigen. Wie kann ich das tun?

728voto

Gabriel Punkte 10694

Der Standardweg, um vertikale Linien hinzuzufügen, die Ihr gesamtes Diagrammfenster abdecken, ohne dass Sie ihre tatsächliche Höhe angeben müssen, lautet 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 viele der für andere Diagrammbefehle verfügbaren Schlüsselwörter verwenden (z.B. color, linestyle, linewidth ...). Sie können Schlüsselwortargumente ymin und ymax in Achsenkoordinaten übergeben (z.B. ymin=0.25, ymax=0.75 wird die mittlere Hälfte des Diagramms abdecken). Es gibt entsprechende Funktionen für horizontale Linien (axhline) und Rechtecke (axvspan).

91voto

Qina Yan Punkte 1126

Für mehrere Zeilen

xposition = [0.3, 0.4, 0.45]
für xc in xposition:
    plt.axvline(x=xc, Farbe='k', linestyle='--')

56voto

seralouk Punkte 26706

Um eine Legende und/oder Farben zu einigen vertikalen Linien hinzuzufügen, verwenden Sie dies:

import matplotlib.pyplot as plt

# x-Koordinaten für die Linien
xcoords = [0.1, 0.3, 0.5]
# Farben für die Linien
colors = ['r','k','b']

for xc,c in zip(xcoords,colors):
    plt.axvline(x=xc, label='Linie bei x = {}'.format(xc), c=c)

plt.legend()
plt.show()

Ergebnisse

Mein toller Plot seralouk

30voto

Peter Punkte 10417

Das Aufrufen von axvline in einer Schleife, wie von anderen vorgeschlagen, funktioniert, kann jedoch umständlich sein, weil:

  1. Jede Linie ein separates Plot-Objekt ist, was zu sehr langsamen Vorgängen führt, wenn Sie viele Linien haben.
  2. Wenn Sie die Legende erstellen, hat jede Linie einen neuen Eintrag, was möglicherweise nicht das ist, was Sie wollen.

Stattdessen können Sie die folgenden praktischen Funktionen verwenden, die alle Linien als ein einziges Plot-Objekt erstellen:

import matplotlib.pyplot as plt
import numpy as np

...

19voto

Sheldore Punkte 36175

Zusätzlich zu plt.axvline und plt.plot((x1, x2), (y1, y2)) oder plt.plot([x1, x2], [y1, y2]) wie oben in den Antworten angegeben, kann man auch

plt.vlines(x_pos, ymin=y1, ymax=y2)

verwenden, um eine vertikale Linie bei x_pos zu plotten, die von y1 bis y2 reicht, wobei die Werte y1 und y2 in absoluten Datenkoordinaten liegen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X