Haben Sie sich jemals gefragt: "Ich wünschte, ich hätte mehr Farbkarten (oder Farbzyklen)", wenn Sie mit "matplotlib" zeichnen?
Hier stellen wir eine praktische Erweiterungsbibliothek vor, die solche Probleme löst.
Das ist ** palettetable **. Es sind ** 1599 ** Farbkarten verfügbar.
Es gibt 79 Standardfarbkarten für matplotlib
, also ungefähr 20 mal ** !!.
Die Farbkarte von matplotlib
kann auf verschiedene Arten selbst bearbeitet und erstellt werden, sodass Sie sich nicht wirklich auf die Erweiterungsbibliothek verlassen müssen. palettable
ist nur ein Archiv der vielen auf diese Weise erstellten Farbkarten.
Dieser Artikel ist also für ** "Ich möchte mehr Farbkarten verwenden, aber es ist schwierig, diese selbst zu recherchieren und zu erstellen. Wenn Sie eine benutzerfreundliche Erweiterungsbibliothek haben, verwenden Sie sie!" ** ..
Die Liste der Farbkarten für "palettable" ist im Artikel ** hier ** zusammengefasst (ich habe sie getrennt, weil es zu viele gibt). Die ursprüngliche Website (Englisch) ist hier.
Es kann einfach mit dem Befehl pip
installiert werden.
pip install palettable
matplotlib folgt beim Zeichnen von Plots dem Standardfarbzyklus. So gehen beispielsweise standardmäßig 10 Teile umher und das 11. Teil kehrt zur ursprünglichen Farbe zurück.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 100)
fig, ax = plt.subplots()
for i in range(11):
y = np.sin(x)+i
ax.plot(x, y)
plt.show()
Der zu diesem Zeitpunkt verwendete Farbzyklus war der Standardwert "tab10" in "matplotlib":
Lassen Sie uns dies nun in einen "palettierbaren" Farbzyklus ändern. Dieses Mal werde ich palettable.scientific.sequential.Tokyo_10
verwenden. Der Farbzyklus von "palettable" ist "palette.scientific.sequential.Tokyo_10.mpl_colors"
Sie können es bekommen (fügen Sie einfach .mpl_colors
am Ende hinzu).
Verwenden Sie zum Ändern des Farbzyklus ax.set_prop_cycle ()
:
import numpy as np
import matplotlib.pyplot as plt
import palettable #hinzufügen
x = np.linspace(0, 2*np.pi, 100)
fig, ax = plt.subplots()
#Fügen Sie die folgende Zeile hinzu
ax.set_prop_cycle('color', palettable.scientific.sequential.Tokyo_10.mpl_colors)
for i in range(11):
y = np.sin(x)+i
ax.plot(x, y)
plt.show()
Das Ergebnis ist so. Es hat einen bestimmten Farbzyklus und es geht um 10 Stück.
Hier ist das an "ax.set_prop_cycle ()" übergebene "palettable.scientific.sequential.Tokyo_10.mpl_colors" nur ein Python-Listenobjekt. Der Inhalt ist so. Es ist ein standardisiertes 10 x 3-RGB-Array:
>>> palettable.scientific.sequential.Tokyo_10.mpl_colors
[(0.10196078431372549, 0.054901960784313725, 0.20392156862745098),
(0.27058823529411763, 0.12549019607843137, 0.2980392156862745),
(0.43137254901960786, 0.24313725490196078, 0.403921568627451),
(0.5215686274509804, 0.3686274509803922, 0.47058823529411764),
(0.5529411764705883, 0.4745098039215686, 0.5098039215686274),
(0.5725490196078431, 0.5803921568627451, 0.5372549019607843),
(0.592156862745098, 0.6823529411764706, 0.5686274509803921),
(0.6549019607843137, 0.807843137254902, 0.615686274509804),
(0.8352941176470589, 0.9490196078431372, 0.7372549019607844),
(0.996078431372549, 0.996078431372549, 0.8470588235294118)]
Darüber hinaus wird die Anzahl der Runden durch die letzte Anzahl von "palettable.scientific.sequential.Tokyo_10" bestimmt, und die Anzahl, die angegeben werden kann, hängt vom Farbcode ab. Beispielsweise können Sie in "palettable.scientific.sequential.Tokyo_" von "3" bis "20" angeben.
Wenn Sie beispielsweise palettable.scientific.sequential.Tokyo_11
verwenden, um mit 11 Teilen herumzugehen, sieht dies wie folgt aus:
Ich ging mit nur 11 Stück herum.
Es ist endlich die Farbkarte. Eigentlich ist dieser einfacher zu bedienen. Lassen Sie uns zunächst ein zweidimensionales Diagramm mit einem einfachen Beispielcode erstellen.
import numpy as np
import matplotlib.pyplot as plt
xx, yy = np.meshgrid(np.linspace(0, 2*np.pi, 100), np.linspace(0, 2*np.pi, 100))
zz = np.sin(xx+yy)
fig, ax = plt.subplots()
mp = ax.imshow(zz, cmap="Blues") #Geben Sie die Farbkarte in dieser Zeile an
fig.colorbar(mp)
Lassen Sie uns nun diese Farbkarte in dieselbe palettable.scientific.sequential.Tokyo_10
wie zuvor ändern.
Die Farbkarte für "palettable" lautet "palette.scientific.sequential.Tokyo_10.mpl_colormap"
Sie können es bekommen (fügen Sie einfach .mpl_colormap
am Ende hinzu).
import numpy as np
import matplotlib.pyplot as plt
import palettable #hinzufügen
xx, yy = np.meshgrid(np.linspace(0, 2*np.pi, 100), np.linspace(0, 2*np.pi, 100))
zz = np.sin(xx+yy)
fig, ax = plt.subplots()
#Ändern Sie die Option cmap in der nächsten Zeile
mp = ax.imshow(zz, cmap=palettable.scientific.sequential.Tokyo_10.mpl_colormap)
fig.colorbar(mp)
Die Atmosphäre sieht ganz anders aus.
Der Inhalt von palettable.scientific.sequential.Tokyo_10.mpl_colormap
, der der Option cmap zugewiesen wird, ist das Objekt LinearSegmentedColormap
von matplotlib.colors
:
>>> palettable.scientific.sequential.Tokyo_10.mpl_colormap
<matplotlib.colors.LinearSegmentedColormap at 0x7fb05793f0d0>
Wenn Sie die "palettierbare" Farbkarte verwenden, wird die Farbauflösung auf dieselbe Weise dargestellt wie die letzte Zahl ("_10" -Teil), die die Anzahl der Farbzykluszyklen angibt. Versuchen wir, _3
und _20
zu vergleichen:
Das Erscheinungsbild wird sich erheblich ändern. Es ist eine gute Idee, die Farbauflösung entsprechend dem Schwankungsbereich zu ändern, den Sie ausdrücken möchten.
Die Liste der palettierbaren Farbkarten ist im Artikel ** hier ** zusammengefasst. Vielen Dank für das Lesen bis zum Ende.
Recommended Posts