Calendrier de l'Avent Python 2015 de Adventar C'est l'article du 21e jour.
Lorsque vous dessinez un graphe en Python, je pense que vous utiliserez Matplotlib. Récemment, il existe une bibliothèque appelée Seaborn qui nettoie le graphe, et j'adore ça. Cependant, il est pratique de personnaliser la palette de couleurs avec + α lorsque vous souhaitez sélectionner ou définir la couleur plus librement. Cette fois, je vais vous présenter ceci.
Tout d'abord, c'est l'import de set habituel. La plupart d'entre eux sont dans Anaconda, mais vous pouvez installer ceux qui manquent avec pip install <nom de la bibliothèque que vous voulez installer>
.
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)
J'utilise l'ensemble de données d'iris habituel comme un essai.
#Chargement des données d'iris
iris = datasets.load_iris()
Si vous dessinez un diagramme de dispersion en codant par couleur chaque type d'iris, il sera noir et blanc comme ceci ...
#Affichage du diagramme de dispersion (la couleur devient noir et blanc ...)
plt.figure(figsize=(10,7))
plt.scatter(iris.data[:,0], iris.data[:,1], linewidths=0, alpha=1,
c=iris.target # iris.la cible représente le type[0, 1, 2]Parce qu'il contient, il est codé par couleur
)
plt.show()
Vous pouvez spécifier la couleur en spécifiant le nom de la couleur individuellement dans l'argument c
. Mais je ne pense pas que ce soit intelligent.
#Affichage du diagramme de dispersion (spécifier les couleurs une par une)
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.la cible représente le type[0, 1, 2]Parce qu'il contient, il est codé par couleur
)
plt.show()
Comme il est difficile de spécifier la couleur pour chaque type, vous pouvez également utiliser la palette de couleurs initialement définie dans Matplotlib. Pour les cartes de couleurs, vous pouvez voir les définitions des différentes cartes de couleurs en vous référant à ici.
#Appliquer la palette de couleurs définie
#Référence: 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 #Spécifiez la palette de couleurs ici
)
fig.colorbar(im)
plt.show()
Mais il est difficile de faire correspondre la couleur souhaitée.
Alors, personnalisons et définissons nous-mêmes cette carte de couleurs. Si vous spécifiez un nom de couleur ou un code de couleur hexadécimal dans la liste, une carte de couleurs sera créée tout en complétant de manière linéaire et linéaire les espaces. Je ne peux pas bien l'expliquer en japonais, alors jetons un coup d'œil à un exemple d'utilisation.
#Personnaliser la palette de couleurs
from matplotlib.colors import LinearSegmentedColormap
def generate_cmap(colors):
"""Renvoie une palette de couleurs auto-définie"""
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)
Puisqu'il existe 3 types de données d'iris, spécifiez 3 couleurs. Vous pouvez voir une liste de noms de couleurs utilisables en vous référant à ici.
#Personnalisez les couleurs,Partie 1:Spécifié par le nom de la couleur
#Référence: 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()
Vous pouvez également le spécifier en notation hexadécimale au lieu du nom de la couleur. Ici était utile pour le code de couleur hexadécimal.
#Personnalisez les couleurs,Partie 2: Désigné en hexadécimal
# 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()
Lorsqu'une couleur claire est spécifiée, un arrière-plan blanc est plus facile à voir qu'un arrière-plan gris. Vous pouvez le changer avec seaborn, alors rendons l'arrière-plan blanc.
#Personnalisez les couleurs,Partie 3: blanchir l'arrière-plan
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()
Ensuite, exprimons la valeur de la fonction qui prend les coordonnées planes (deux variables) comme arguments en couleur. La personnalisation de la palette de couleurs est très efficace dans ces cas.
#Remplissage lisse
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()
Enfin, voici un exemple d'expression de la hauteur des lignes de contour en couleur. Il est également très efficace de pouvoir spécifier notamment la gradation dans la carte des couleurs.
#contour
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()
Le code est publié sur GitHub. https://github.com/matsuken92/Qiita_Contents/blob/master/General/Matplotlib_color_settings.ipynb
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 des couleurs avec des noms définis http://matplotlib.org/examples/color/named_colors.html Code couleur hexagonal http://www5.plala.or.jp/vaio0630/hp/c_code.htm
Recommended Posts