[Python] Passen Sie Colormap an, wenn Sie Diagramme mit matplotlib zeichnen

Python-Adventskalender 2015 von Adventar Dies ist der Artikel am 21. Tag.

Ich denke, Sie werden beim Zeichnen eines Diagramms in Python Matplotlib verwenden. Vor kurzem gab es eine Bibliothek namens Seaborn, die das Diagramm bereinigt, und ich liebe es. Es ist jedoch praktisch, die Farbkarte mit + α anzupassen, wenn Sie die Farbe freier auswählen oder einstellen möchten. Dieses Mal werde ich dies vorstellen.

Vorbereitung

Zunächst ist es der übliche Set-Import. Die meisten davon befinden sich in Anaconda, aber Sie können die fehlenden mit pip install <Bibliotheksname, den Sie installieren möchten> installieren.

import numpy as np
import pandas as pd
from sklearn import datasets

import matplotlib.pyplot as plt
import matplotlib.cm as cm
%matplotlib inline
import seaborn as sns

sns.set(style="darkgrid", palette="muted", color_codes=True) 

Ich benutze den üblichen Iris-Datensatz als Test.

#Irisdaten laden
iris = datasets.load_iris()

Wenn Sie einfach ein Streudiagramm zeichnen, indem Sie jeden Iristyp farblich kennzeichnen, wird es wie folgt schwarzweiß ...

#Anzeige des Streudiagramms (Farbe wird schwarz und weiß ...)
plt.figure(figsize=(10,7))
plt.scatter(iris.data[:,0], iris.data[:,1], linewidths=0, alpha=1,
            c=iris.target   # iris.Ziel repräsentiert den Typ[0, 1, 2]Da es enthält, ist es farbcodiert
           )
plt.show()

plot_01.png

Sie können die Farbe angeben, indem Sie den Namen der Farbe einzeln im Argument "c" angeben. Aber ich denke nicht, dass es klug ist.

#Anzeige des Streudiagramms (Farben einzeln angeben)
def set_color(l):
    if l == 0:
        return "b"  # blue
    elif l == 1:
        return "g"  # green
    else:
        return "r"  # red
    
color_list = map(set_color, iris.target)

plt.figure(figsize=(10,7))
plt.scatter(iris.data[:,0], iris.data[:,1], linewidths=0, alpha=1,
            c=iris.target   # iris.Ziel repräsentiert den Typ[0, 1, 2]Da es enthält, ist es farbcodiert
           )
plt.show()

plot_02.png

Da es schwierig ist, die Farbe für jeden Typ anzugeben, können Sie auch die ursprünglich in Matplotlib definierte Farbkarte verwenden. Für Colormaps können Sie verschiedene Colormap-Definitionen unter hier anzeigen.

#Wenden Sie die definierte Farbkarte an
#Referenz: http://matplotlib.org/examples/color/colormaps_reference.html

fig = plt.figure(figsize=(13,7))
im = plt.scatter(iris.data[:,0], iris.data[:,1], c=iris.target, linewidths=0, alpha=1, 
                 cmap=cm.Accent #Geben Sie hier die Farbkarte an
                )
fig.colorbar(im)
plt.show()

Es ist jedoch schwierig, die gewünschte Farbe zu finden. plot_03.png

Colormap-Anpassung

Lassen Sie uns diese Farbkarte also selbst anpassen und definieren. Wenn Sie in der Liste einen Farbnamen oder einen hexadezimalen Farbcode angeben, wird eine Farbkarte erstellt, die die Leerzeichen reibungslos linear ergänzt. Ich kann es nicht gut auf Japanisch erklären, also schauen wir uns ein Anwendungsbeispiel an.

#Passen Sie die Farbkarte an
from matplotlib.colors import LinearSegmentedColormap

def generate_cmap(colors):
    """Gibt eine selbst definierte Farbkarte zurück"""
    values = range(len(colors))
    
    vmax = np.ceil(np.max(values))
    color_list = []
    for v, c in zip(values, colors):
        color_list.append( ( v/ vmax, c) )
    return LinearSegmentedColormap.from_list('custom_cmap', color_list)

Da es 3 Arten von Irisdaten gibt, geben Sie 3 Farben an. Eine Liste der verwendbaren Farbnamen finden Sie unter hier.

#Farben anpassen,Teil 1:Angegeben durch den Farbnamen
#Referenz: http://matplotlib.org/examples/color/named_colors.html
unique_value = set(iris.target)
print unique_value
# --> [0, 1, 2]

cm = generate_cmap(['mediumblue', 'limegreen', 'orangered'])

fig = plt.figure(figsize=(13,7))
im = plt.scatter(iris.data[:,0], iris.data[:,1], c=iris.target, linewidths=0, alpha=.8, cmap=cm)
fig.colorbar(im)
plt.show()

plot_04.png

Sie können es auch in hexadezimaler Schreibweise anstelle des Farbnamens angeben. Hier war hilfreich für den hexadezimalen Farbcode.

#Farben anpassen,Teil 2: Hexadezimal bezeichnet
# http://www5.plala.or.jp/vaio0630/hp/c_code.htm

cm = generate_cmap(['#87CEEB', '#2E8B57', '#F4A460'])

fig = plt.figure(figsize=(13,7))
im = plt.scatter(iris.data[:,0], iris.data[:,1], c=iris.target, linewidths=0, alpha=.8, cmap=cm)
fig.colorbar(im)
plt.show()

plot_04-2.png

Wenn eine helle Farbe angegeben wird, ist ein weißer Hintergrund leichter zu erkennen als ein grauer Hintergrund. Sie können es mit seaborn ändern, also lassen Sie uns den Hintergrund weiß machen.

#Farben anpassen,Teil 3: Den Hintergrund aufhellen
sns.set(style="whitegrid", palette="muted", color_codes=True)

cm = generate_cmap(['#87CEEB', '#2E8B57', '#F4A460'])

fig = plt.figure(figsize=(13,7))
im = plt.scatter(iris.data[:,0], iris.data[:,1], c=iris.target, linewidths=0, alpha=.8, cmap=cm)
fig.colorbar(im)
plt.show()

plot_05.png

Als nächstes drücken wir den Wert der Funktion aus, die Ebenenkoordinaten (zwei Variablen) als Argumente in Farbe verwendet. Die Anpassung der Farbkarte ist in diesen Fällen sehr effektiv.

#Glatte Füllung
n = 501
X, Y = np.meshgrid(np.linspace(0, 1, n), np.linspace(0, 1, n))
Z = np.sin(X*30) + np.cos(Y*30)
print np.min(Z), np.max(Z)

cm = generate_cmap(['#00008B', '#aaaaab', '#FFFFFF', '#F4D793', '#F4A460'])

fig =plt.figure(figsize=(10,8))
im = plt.pcolor(X, Y, Z, cmap=cm)

fig.colorbar(im)
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.show()

plot_06.png

Schließlich ist hier ein Beispiel für das Ausdrücken der Höhe von Konturlinien in Farbe. Es ist auch sehr effektiv, die Einbeziehung der Abstufung in die Farbkarte angeben zu können.

#Kontur
n = 201
X, Y = np.meshgrid(np.linspace(0, 1, n), np.linspace(0, 1, n))
Z = np.sin(X*20) * np.cos(Y*20)

cm = generate_cmap(['indigo', 'white', 'salmon'])

fig =plt.figure(figsize=(10,8))
interval = [i/10. -1 for i in range(20)]
im = plt.contour(X, Y, Z, interval, alpha=0.5, cmap=cm)

fig.colorbar(im)
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.show()

plot_07.png

Code für diesen Artikel

Der Code wird auf GitHub veröffentlicht. https://github.com/matsuken92/Qiita_Contents/blob/master/General/Matplotlib_color_settings.ipynb

Referenz

Matplotlib colormaps reference  http://matplotlib.org/examples/color/colormaps_reference.html Making a custom colormap using matplotlib in python (stackoverflow)  http://stackoverflow.com/questions/24997926/making-a-custom-colormap-using-matplotlib-in-python Liste der Farben mit definierten Namen  http://matplotlib.org/examples/color/named_colors.html Sechseck-Farbcode  http://www5.plala.or.jp/vaio0630/hp/c_code.htm

Recommended Posts

[Python] Passen Sie Colormap an, wenn Sie Diagramme mit matplotlib zeichnen
Wenn matplotlib nicht mit python2.7 funktioniert
[Python] Zeichnen mehrerer Diagramme mit Matplotlib
Heatmap von Python + matplotlib
[Python] Ravel () ist praktisch, wenn Sie mehrere Diagramme zeichnen
Echtzeitzeichnung mit Matplotlib
Zeichnen mit Python Tinker
(Für diejenigen, die mit Matplotlib nicht vertraut sind) Tipps zum Zeichnen von Diagrammen mit Seaborn
Diagrammzeichnungsmethode mit matplotlib
Fehler beim Spielen mit Python
Animieren Sie mehrere Diagramme mit matplotlib
[Python] Verwendung von Matplotlib, einer Bibliothek zum Zeichnen von Diagrammen
Erstellen Sie eine Plotanimation mit Python + Matplotlib
Python-Grafikhandbuch mit Matplotlib.
Zeichnen Sie einfach Diagramme mit matplotlib
Zeichne Riapnov Fractal mit Python, matplotlib
Führen Sie mit Python, matplotlib, einen logarithmischen Normalwahrscheinlichkeitsplot durch
Vorsichtsmaßnahmen bei Verwendung von sechs mit Python 2.5
[Python] Format, wenn to_csv mit Pandas
[Python] Legen Sie den Diagrammbereich mit matplotlib fest
Snippet für die Vollbit-Suche mit Python
Hinweise beim Erstellen einer Umgebung mit Python
Versuchen Sie, mit matplotlib eine Normalverteilung zu zeichnen
[Python] Zeichnen eines Wirbelmusters mit einer Schildkröte
Zu beachtende Punkte bei der Lösung von DP-Problemen mit Python
Schreiben Sie SVG-Diagramme mit Matplotlib mit Heroku
Japanisches Diagramm mit VS Code + matplotlib anzeigen
[Python] Lassen Sie uns matplotlib mit Japanisch kompatibel machen
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Versuchen Sie, eine Karte mit Python + Cartopy 0.18.0 zu zeichnen
[Wissenschaftlich-technische Berechnung von Python] Zeichnungsanimation der parabolischen Bewegung mit Locus, Matplotlib
Fehler beim Installieren eines Moduls mit Python pip
[Python] Grenzachse des 3D-Graphen mit Matplotlib
Lesen Sie Python-CSV-Daten mit Pandas ⇒ Graph mit Matplotlib
Zeichentipps mit matplotlib auf der Serverseite
Erste Schritte mit dem Zeichnen mit matplotlib: Schreiben einfacher Funktionen
Persönliche Tipps, wenn Sie verschiedene Dinge mit Python 3 tun
Vorsichtsmaßnahmen beim Umgang mit Kontrollstrukturen in Python 2.6
Ein Memo beim Erstellen einer Python-Umgebung mit Miniconda
Zeichenkodierung beim Umgang mit Dateien in Python 3
[Python] [vscode] Wenn Sie sich über Space-Tab-Mix ärgern
Grafikzeichnung mit Jupyter (Ipython-Notizbuch) + Matplotlib + Vagabund
Materialien zum Lesen, wenn Sie mit Python beginnen
[Python] Zeichnung optimieren
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
# Python-Grundlagen (#matplotlib)
Twilio mit Python
Spielen Sie mit 2016-Python
Getestet mit Python
Animation mit matplotlib
mit Syntax (Python)
Meine Matplotlib (Python)
Japanisch mit Matplotlib
Bingo mit Python
Animation mit matplotlib
Histogramm mit Matplotlib
Erstellen Sie eine Animation mit matplotlib