2017-01-23 4 views

Répondre

3

Vous avez besoin essentiellement de créer votre propre palette de couleurs qui a les caractéristiques particulières que vous voulez. Bien sûr, il est possible d'utiliser les cartes de couleurs existantes pour ce faire.

Les palettes de couleurs sont toujours comprises entre 0 et 1. Cette plage sera ensuite mappée à l'intervalle de données. Donc, afin de créer des blancs entre -0.5 et 0.5 nous avons besoin de connaître la plage de données - disons que les données vont de -1 à 1. On peut alors décider que la partie inférieure (blues) de la carte sismique passe de -1 à -0.5, puis avoir du blanc entre -0.5 et +0.5 et enfin la partie supérieure de la carte sismique (rouge) de 0.5 à . Dans le langage d'une palette de couleurs, cela correspond aux plages [0,0.25], [0.25, 0.75] et [0.75,1]. Nous pouvons ensuite créer une liste, le premier et dernier 25% étant les couleurs de la carte sismique et le milieu 50% blanc. Cette liste peut être utilisée pour créer une palette de couleurs en utilisant matplotlib.colors.LinearSegmentedColormap.from_list("colormapname", listofcolors).

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

n=50 
x = 0.5 
lower = plt.cm.seismic(np.linspace(0, x, n)) 
white = plt.cm.seismic(np.ones(100)*0.5) 
upper = plt.cm.seismic(np.linspace(1-x, 1, n)) 
colors = np.vstack((lower, white, upper)) 
tmap = matplotlib.colors.LinearSegmentedColormap.from_list('terrain_map_white', colors) 

x = np.linspace(0,10) 
X,Y = np.meshgrid(x,x) 
z = np.sin(X) * np.cos(Y*0.4) 

fig, ax = plt.subplots() 
im = ax.imshow(z, cmap=tmap)  
plt.colorbar(im) 

plt.show() 

enter image description here

Pour les cas plus généraux, vous pouvez avoir besoin d'une normalisation de la couleur (en utilisant matplotlib.colors.Normalize). Voir par exemple this example, où une certaine couleur dans la palette de couleurs est toujours fixée à une valeur de données de 0, indépendamment de la plage de données.