Matplotlib macht dies standardmäßig.
Z.B:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
plt.plot(x, x)
plt.plot(x, 2 * x)
plt.plot(x, 3 * x)
plt.plot(x, 4 * x)
plt.show()
Und wie Sie vielleicht bereits wissen, können Sie ganz einfach eine Legende hinzufügen:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
plt.plot(x, x)
plt.plot(x, 2 * x)
plt.plot(x, 3 * x)
plt.plot(x, 4 * x)
plt.legend(['y = x', 'y = 2x', 'y = 3x', 'y = 4x'], loc='upper left')
plt.show()
Wenn Sie die Farben steuern möchten, die durchlaufen werden:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
plt.gca().set_color_cycle(['red', 'green', 'blue', 'yellow'])
plt.plot(x, x)
plt.plot(x, 2 * x)
plt.plot(x, 3 * x)
plt.plot(x, 4 * x)
plt.legend(['y = x', 'y = 2x', 'y = 3x', 'y = 4x'], loc='upper left')
plt.show()
Wenn Sie mit matplotlib nicht vertraut sind, ist das Tutorial ein guter Anfang .
Bearbeiten:
Zunächst einmal, wenn Sie viele (> 5) Dinge haben, die Sie auf einer Figur darstellen möchten, entweder:
- Platzieren Sie sie auf verschiedenen Plots (verwenden Sie möglicherweise einige Unterplots auf einer Figur) oder
- Verwenden Sie etwas anderes als Farbe (dh Markierungsstile oder Linienstärke), um zwischen ihnen zu unterscheiden.
Andernfalls werden Sie mit einer sehr chaotischen Handlung enden! Sei nett zu dem, der jemals lesen wird, was auch immer du tust, und versuche nicht, 15 verschiedene Dinge auf eine Figur zu packen !!
Darüber hinaus sind viele Menschen in unterschiedlichem Maße farbenblind, und es ist für mehr Menschen schwierig, zwischen zahlreichen subtil unterschiedlichen Farben zu unterscheiden, als Sie vielleicht denken.
Wenn Sie jedoch wirklich 20 Linien mit 20 relativ unterschiedlichen Farben auf eine Achse legen möchten, haben Sie folgende Möglichkeiten:
import matplotlib.pyplot as plt
import numpy as np
num_plots = 20
# Have a look at the colormaps here and decide which one you'd like:
# http://matplotlib.org/1.2.1/examples/pylab_examples/show_colormaps.html
colormap = plt.cm.gist_ncar
plt.gca().set_prop_cycle(plt.cycler('color', plt.cm.jet(np.linspace(0, 1, num_plots))))
# Plot several different functions...
x = np.arange(10)
labels = []
for i in range(1, num_plots + 1):
plt.plot(x, i * x + 5 * i)
labels.append(r'$y = %ix + %i$' % (i, 5*i))
# I'm basically just demonstrating several different legend options here...
plt.legend(labels, ncol=4, loc='upper center',
bbox_to_anchor=[0.5, 1.1],
columnspacing=1.0, labelspacing=0.0,
handletextpad=0.0, handlelength=1.5,
fancybox=True, shadow=True)
plt.show()
set_color_cycle
veraltet ist, sodass diese Zeile sein sollteplt.gca().set_prop_cycle(plt.cycler('color', plt.cm.jet(np.linspace(0, 1, num_plots))))
und ändern Sie sie einfachplt.cm.YOUR_PREFERED_COLOR_MAP
entsprechend Ihren Anforderungen.axes
) entsprechend unterschiedlich färbt, und fragte, ob die Farbe einer einzelnen Linie in verschiedenen Diagrammen (unterschiedlichaxes
) variiert werden soll. Das heißt, eine ausgezeichnete Antwort auf eine wichtige Frage (möglicherweise anders als das, was OP gestellt hat, aber niemand kann es sagen, weil sie diese einzelne Frage gestellt haben und verschwunden sind!) - +1Stellen Sie sie später ein
Wenn Sie die Anzahl der Diagramme, die Sie zeichnen möchten, nicht kennen, können Sie die Farben ändern, sobald Sie sie gezeichnet haben. Dabei verwende
.lines
ich diese Lösung:Einige zufällige Daten
Der Code, den Sie benötigen:
Das Ergebnis ist folgendes:
quelle
TL; DR Nein, das kann nicht automatisch gemacht werden . Ja, es ist möglich.
Jedes Diagramm (
axes
) in einer Abbildung (figure
) hat einen eigenen Farbzyklus. Wenn Sie nicht für jedes Diagramm eine andere Farbe erzwingen, haben alle Diagramme dieselbe Farbreihenfolge, aber wenn wir etwas strecken, bedeutet dies "automatisch" kann es getan werden.Das OP schrieb
Aber ... Matplotlib generiert automatisch unterschiedliche Farben für jede unterschiedliche Kurve
Warum also die OP-Anfrage? Wenn wir weiterlesen, haben wir
und es ist sinnvoll, weil jede Handlung (jede
axes
in Matplotlibs Sprache) ihre eigene hatcolor_cycle
(oder besser gesagt, 2018prop_cycle
) und jede Handlung (axes
) dieselben Farben in derselben Reihenfolge wiederverwendet.Wenn dies die Bedeutung der ursprünglichen Frage ist, besteht eine Möglichkeit darin, für jedes Diagramm explizit eine andere Farbe zu benennen.
Wenn die Diagramme (wie so oft) in einer Schleife generiert werden, benötigen wir eine zusätzliche Schleifenvariable, um die von Matplotlib automatisch ausgewählte Farbe zu überschreiben .
Eine andere Möglichkeit besteht darin, ein Cycler-Objekt zu instanziieren
Beachten Sie, dass
type(my_cycler)
istcycler.Cycler
abertype(actual_cycler)
istitertools.cycle
.quelle
Ich möchte eine geringfügige Verbesserung gegenüber der letzten Schleifenantwort im vorherigen Beitrag anbieten (dieser Beitrag ist korrekt und sollte trotzdem akzeptiert werden). Die implizite Annahme, die beim Beschriften des letzten Beispiels getroffen wurde, ist, dass
plt.label(LIST)
die Beschriftungsnummer X inLIST
die Zeile eingefügt wird, die dem X. Mal entspricht,plot
als aufgerufen wurde. Ich bin schon einmal auf Probleme mit diesem Ansatz gestoßen. Der empfohlene Weg, Legenden zu erstellen und ihre Etiketten gemäß der matplotlibs-Dokumentation ( http://matplotlib.org/users/legend_guide.html#adjusting-the-order-of-legend-item ) anzupassen, besteht darin, ein warmes Gefühl dafür zu haben, dass die Etiketten funktionieren zusammen mit den genauen Handlungen, von denen Sie glauben, dass sie es tun:**: Matplotlib Legends funktionieren nicht
quelle