Recherche…


Utilisation de base

L' utilisation colormaps intégré est aussi simple que passer le nom de la palette de couleurs nécessaire (comme indiqué dans la référence de colormaps ) à la fonction de traçage (comme pcolormesh ou contourf ) qui l' attend, le plus souvent sous la forme d'un cmap argument mot - clé:

import matplotlib.pyplot as plt
import numpy as np

plt.figure()
plt.pcolormesh(np.random.rand(20,20),cmap='hot')
plt.show()

exemple le plus simple

Les Colormaps sont particulièrement utiles pour visualiser des données tridimensionnelles sur des tracés bidimensionnels, mais une bonne palette de couleurs peut également rendre un tracé tridimensionnel correct plus clair:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import LinearLocator

# generate example data
import numpy as np
x,y = np.meshgrid(np.linspace(-1,1,15),np.linspace(-1,1,15))
z = np.cos(x*np.pi)*np.sin(y*np.pi)

# actual plotting example
fig = plt.figure()
ax1 = fig.add_subplot(121, projection='3d')
ax1.plot_surface(x,y,z,rstride=1,cstride=1,cmap='viridis')
ax2 = fig.add_subplot(122)
cf = ax2.contourf(x,y,z,51,vmin=-1,vmax=1,cmap='viridis')
cbar = fig.colorbar(cf)
cbar.locator = LinearLocator(numticks=11)
cbar.update_ticks()
for ax in {ax1, ax2}:
    ax.set_xlabel(r'$x$')
    ax.set_ylabel(r'$y$')
    ax.set_xlim([-1,1])
    ax.set_ylim([-1,1])
    ax.set_aspect('equal')

ax1.set_zlim([-1,1])
ax1.set_zlabel(r'$\cos(\pi x) \sin(\p    i y)$')

plt.show()

exemple un peu plus avancé

Utilisation de couleurs personnalisées

Outre les colonnes de couleurs intégrées définies dans la référence de couleurs (et leurs mappes inversées, avec '_r' ajouté à leur nom), des couleurs personnalisées peuvent également être définies. La clé est le module matplotlib.cm .

L'exemple ci-dessous définit une palette de cm.register_cmap très simple à l'aide de cm.register_cmap , contenant une seule couleur, l'opacité (valeur alpha) de la couleur interpolant entièrement opaque et totalement transparente dans la plage de données. Notez que les lignes importantes du point de vue de la palette de couleurs sont l'importation de cm , l'appel à register_cmap et le passage de la palette de plot_surface à plot_surface .

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.cm as cm

# generate data for sphere
from numpy import pi,meshgrid,linspace,sin,cos
th,ph = meshgrid(linspace(0,pi,25),linspace(0,2*pi,51))
x,y,z = sin(th)*cos(ph),sin(th)*sin(ph),cos(th)

# define custom colormap with fixed colour and alpha gradient
# use simple linear interpolation in the entire scale
cm.register_cmap(name='alpha_gradient',
                 data={'red':   [(0.,0,0),
                                 (1.,0,0)],

                       'green': [(0.,0.6,0.6),
                                 (1.,0.6,0.6)],

                       'blue':  [(0.,0.4,0.4),
                                 (1.,0.4,0.4)],

                       'alpha': [(0.,1,1),
                                 (1.,0,0)]})

# plot sphere with custom colormap; constrain mapping to between |z|=0.7 for enhanced effect
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x,y,z,cmap='alpha_gradient',vmin=-0.7,vmax=0.7,rstride=1,cstride=1,linewidth=0.5,edgecolor='b')
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_zlim([-1,1])
ax.set_aspect('equal')

plt.show()

exemple avec dégradé alpha

Dans des scénarios plus compliqués, on peut définir une liste de valeurs R / G / B (/ A) dans lesquelles matplotlib interpole linéairement afin de déterminer les couleurs utilisées dans les tracés correspondants.

Colormaps perceptuellement uniformes

La carte de couleurs originale par défaut de MATLAB (remplacée dans la version R2014b) appelée jet est omniprésente en raison de son contraste élevé et de sa familiarité (et était la valeur par défaut de matplotlib pour des raisons de compatibilité). En dépit de sa popularité, les cartes de couleurs traditionnelles présentent souvent des lacunes en matière de représentation précise des données. Le changement perçu dans ces couleurs ne correspond pas aux changements de données; et une conversion de la palette de couleurs en niveaux de gris (en imprimant, par exemple, une image en utilisant une imprimante noir et blanc) peut entraîner une perte d'informations.

Des palettes de couleurs perceptuellement uniformes ont été introduites pour rendre la visualisation des données aussi précise et accessible que possible. Matplotlib a introduit quatre nouvelles couleurs personnalisées dans la version 1.5, dont l'une (nommée viridis ) par défaut depuis la version 2.0. Ces quatre couleurs ( viridis , inferno , plasma et magma ) sont toutes optimales du point de vue de la perception et devraient être utilisées par défaut pour la visualisation des données, à moins de bonnes raisons de ne pas le faire. Ces couleurs permettent d'introduire le moins de biais possible (en ne créant pas de fonctionnalités là où il n'y en a pas), et conviennent à un public dont la perception des couleurs est réduite.

À titre d'exemple pour les données de distorsion visuelle, considérez les deux tracés de vue supérieure d'objets pyramidaux suivants:

deux objets pyramidaux du haut

Lequel des deux est une véritable pyramide? La réponse est bien sûr que les deux sont, mais ceci est loin d’être évident à partir de l’intrigue utilisant la palette de jet :

Vue 3D des pyramides avec les deux plaques de couleur, jet vs viridis

Cette caractéristique est au cœur de l'uniformité perceptuelle.

Palette de couleurs discrète personnalisée

Si vous avez des plages prédéfinies et que vous souhaitez utiliser des couleurs spécifiques pour ces plages, vous pouvez déclarer une palette de couleurs personnalisée. Par exemple:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors

x = np.linspace(-2,2,500)
y = np.linspace(-2,2,500)
XX, YY = np.meshgrid(x, y)
Z = np.sin(XX) * np.cos(YY)

cmap = colors.ListedColormap(['red', '#000000','#444444', '#666666', '#ffffff', 'blue', 'orange'])
boundaries = [-1, -0.9, -0.6, -0.3, 0, 0.3, 0.6, 1]
norm = colors.BoundaryNorm(boundaries, cmap.N, clip=True)

plt.pcolormesh(x,y,Z, cmap=cmap, norm=norm)
plt.colorbar()
plt.show()

Produit

Sortie de l'échantillon

La couleur i sera utilisée pour les valeurs comprises entre la limite i et i + 1 . Les couleurs peuvent être spécifiées par des noms ( 'red' , 'green' ), des codes HTML ( '#ffaa44' , '#441188' ) ou des '#441188' RVB ( (0.2, 0.9, 0.45) ).



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow