Ich schreibe ein Skript, das etwas plotten wird. Ich möchte, dass mehrere Datenreihen mit jeweils einem einzigartigen Linienstil (nicht Farbe) gezeichnet werden. Ich kann eine Liste leicht durchlaufen, aber gibt es eine solche Liste bereits in Python?
python
matplotlib
linestyle
Yotam
quelle
quelle
Antworten:
Laut dem Dokument können Sie sie folgendermaßen finden:
from matplotlib import lines lines.lineStyles.keys() >>> ['', ' ', 'None', '--', '-.', '-', ':']
Sie können dasselbe mit Markern tun
BEARBEITEN: In den neuesten Versionen gibt es immer noch die gleichen Stile, aber Sie können den Abstand zwischen Punkten / Linien variieren.
quelle
from matplotlib import markers; markers.MarkerStyle.markers.keys()
lines.lineMarkers.keys()
Erzeugt in Version 2.1.2 das gleiche Ergebnis wiemarkers.MarkerStyle.markers.keys()
.plot
Dokumentationhttp://matplotlib.org/1.5.3/api/pyplot_api.html#matplotlib.pyplot.plot enthält eine Liste von Linien- und Markierungsstilen:
character description '-' solid line style '--' dashed line style '-.' dash-dot line style ':' dotted line style '.' point marker ',' pixel marker 'o' circle marker 'v' triangle_down marker '^' triangle_up marker '<' triangle_left marker '>' triangle_right marker '1' tri_down marker '2' tri_up marker '3' tri_left marker '4' tri_right marker 's' square marker 'p' pentagon marker '*' star marker 'h' hexagon1 marker 'H' hexagon2 marker '+' plus marker 'x' x marker 'D' diamond marker 'd' thin_diamond marker '|' vline marker '_' hline marker
Da dies Teil der
pyplot.plot
Dokumentzeichenfolge ist, können Sie es auch vom Terminal aus sehen mit:import matplotlib.pyplot as plt help(plt.plot)
quelle
pyplot.plot()
, können sie lokal angezeigt werden, indem Sie die Dokumentzeichenfolge dieser Funktion lesen :import matplotlib.pyplot as plt; ?plt.plot
. Die Markierungs- und Linienstile sind gegen Ende im Abschnitt "Notizen" aufgeführt.Aus meiner Erfahrung ist es schön, die Farben und Markierungen in einer Liste zu haben, damit ich sie beim Plotten durchlaufen kann.
So erhalte ich die Liste solcher Dinge. Es dauerte etwas zu graben.
import matplotlib colors_array = matplotlib.colors.cnames.keys() markers_array = matplotlib.markers.MarkerStyle.markers.keys()
quelle
Sie können das Wörterbuch aus dem Linestyle-Beispiel kopieren :
from collections import OrderedDict linestyles = OrderedDict( [('solid', (0, ())), ('loosely dotted', (0, (1, 10))), ('dotted', (0, (1, 5))), ('densely dotted', (0, (1, 1))), ('loosely dashed', (0, (5, 10))), ('dashed', (0, (5, 5))), ('densely dashed', (0, (5, 1))), ('loosely dashdotted', (0, (3, 10, 1, 10))), ('dashdotted', (0, (3, 5, 1, 5))), ('densely dashdotted', (0, (3, 1, 1, 1))), ('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))), ('dashdotdotted', (0, (3, 5, 1, 5, 1, 5))), ('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))])
Sie können dann über die Linienstile iterieren
fig, ax = plt.subplots() X, Y = np.linspace(0, 100, 10), np.zeros(10) for i, (name, linestyle) in enumerate(linestyles.items()): ax.plot(X, Y+i, linestyle=linestyle, linewidth=1.5, color='black') ax.set_ylim(-0.5, len(linestyles)-0.5) plt.show()
Oder du nimmst einfach einen einzigen Linestyle aus diesen heraus,
ax.plot([0,100], [0,1], linestyle=linestyles['loosely dashdotdotted'])
quelle
In Python3 gibt die
.keys()
Methode eindict_keys
Objekt zurück und keinlist
. Sie müssen die Ergebnisse übergeben,list()
um das Array wie in python2 indizieren zu können. zB diese SO FrageUm iterierbare Arrays für Linien, Farben und Markierungen zu erstellen, können Sie so etwas wie verwenden.
import matplotlib colors_array = list(matplotlib.colors.cnames.keys()) lines_array = list(matplotlib.lines.lineStyles.keys()) markers_array = list(matplotlib.markers.MarkerStyle.markers.keys())
quelle
Ich beantworte die Frage des Zugriffs auf eine Liste nicht direkt, aber es ist nützlich, auf dieser Seite eine weitere Alternative zu haben: Es gibt eine zusätzliche Möglichkeit, gestrichelte Linienstile zu generieren.
Sie können Linien zwischen A und B mit Querstreifen wie erzeugen
Erhöhen Sie die Breite Ihrer Linie und geben Sie ein benutzerdefiniertes Strichmuster an:
ax.plot(x, y, dashes=[30, 5, 10, 5])
Die Dokumentation für
matplotlib.lines.Line2D
sagt dies überset_dashes(seq)
:Ich denke, es hätte besser gesagt werden können: Während die Linie gemalt wird, gibt die Zahlenfolge an, wie viele Punkte entlang der Linie gemalt werden, wie viele Punkte ausgelassen werden (falls es zwei Zahlen gibt), wie viele gemalt werden, wie viele sind unbemalt (bei vier Zahlen in der Sequenz). Mit vier Zahlen können Sie eine gestrichelte Linie mit einem Strich ‒ erzeugen: [30, 5, 3, 5] ergibt einen 30 Punkte langen Strich, eine 5-Punkte-Lücke, einen 3-Punkte-Strich (einen Punkt) und eine 5 -Punktlücke. Dann wiederholt es sich.
Diese Seite der Dokumentation erläutert diese Möglichkeit. Suchen Sie hier nach zwei verschiedenen Möglichkeiten.
quelle