Ich bin ziemlich neu in Python / Matplotlib und benutze es über das Ipython-Notizbuch. Ich versuche, einem vorhandenen Diagramm einige Anmerkungslinien hinzuzufügen, und kann nicht herausfinden, wie die Linien in einem Diagramm gerendert werden. Also zum Beispiel, wenn ich Folgendes zeichne:
import numpy as np
np.random.seed(5)
x = arange(1, 101)
y = 20 + 3 * x + np.random.normal(0, 60, 100)
p = plot(x, y, "o")
Ich erhalte die folgende Grafik:
Wie würde ich also eine vertikale Linie von (70.100) bis (70.250) hinzufügen? Was ist mit einer diagonalen Linie von (70.100) bis (90.200)?
Ich habe ein paar Dinge ausprobiert, die Line2D()
meinerseits nur zu Verwirrung geführt haben. In R
würde ich einfach die Funktion segmente () verwenden, die Liniensegmente hinzufügen würde. Gibt es ein Äquivalent in matplotlib
?
quelle
x = np.arange(1, 101)
.plt.plot([70, 70], [100, 250], 'k-', lw=2, label="_not in legend")
90
sowohl alsx2
als auch verwendet wird,y1
führt zu viel Unklarheit. Beachten Sie beim Anzeigen, dass sich[70, 90]
dies nicht auf einen einzelnen Punkt am Standort beziehtx1,y1
. Als Referenz sind hier die Bedeutungen der Werte:[x1: 70, x2: 90], [y1: 90, y2: 200]
Für die Neuankömmlinge ist es noch nicht zu spät .
Mit ymin und ymax wird auch der Bereich von y angenommen.
quelle
Verwenden von
vlines
:Die grundlegenden Anrufsignaturen sind:
quelle
vline()
oderhline()
Funktionen nicht gesehen . Was ist mit diagonalen Linien? Ich habe die Frage bearbeitet, um das diagonale Bit hinzuzufügen, nachdem Sie mir die H & V-Linien gezeigt haben.DataFrame
, die x, y-Koordinaten zu enthalten und sie mitstyle='k-'
Matplolib erlaubt jetzt "Anmerkungszeilen", wie das OP gesucht hat. Die
annotate()
Funktion ermöglicht verschiedene Arten von Verbindungspfaden, und ein kopfloser und schwanzloser Pfeil, dh eine einfache Linie, ist eine davon.In der Dokumentation heißt es, dass Sie nur einen Pfeil mit einer leeren Zeichenfolge als erstes Argument zeichnen können.
Aus dem Beispiel des OP:
Genau wie beim Ansatz in der Antwort von gcalmettes können Sie die Farbe, die Linienbreite, den Linienstil usw. auswählen.
Hier ist eine Änderung an einem Teil des Codes, durch die eine der beiden Beispielzeilen rot, breiter und nicht 100% undurchsichtig wird.
Sie können der Verbindungslinie auch eine Kurve hinzufügen, indem Sie die
connectionstyle
.quelle
.plot()
nicht geht.Anstatt zu missbrauchen
plot
oderannotate
, was für viele Zeilen ineffizient sein wird, können Sie Folgendes verwendenmatplotlib.collections.LineCollection
:Es wird eine Liste von Zeilen erstellt
[l1, l2, ...]
, wobei jede Zeile eine Folge von N Koordinaten ist ( N kann mehr als zwei sein).Die Standardformatierungsschlüsselwörter sind verfügbar und akzeptieren entweder einen einzelnen Wert. In diesem Fall gilt der Wert für jede Zeile oder eine Folge von M.
values
In diesem Fall ist der Wert für die i- te Zeilevalues[i % M]
.quelle