2015-11-25 2 views
3

J'utilise habituellement la barre de couleur "sismique" de matplotlib.Barre de couleurs en noir et blanc

Pour un besoin de publication, je dois utiliser des couleurs noir et blanc. Je voudrais garder le même aspect que « sismiques » (à savoir, les valeurs pour les plus hautes noires valeurs min et max), comme indiqué sur l'image:

enter image description here

Comment puis-je faire cette conversion?

+4

Juste mon avis, mais si les données sismiques sera en nuances de gris, alors il est préférable de ne pas utiliser un colourbar divergente - parce que vos lecteurs peuvent alors ne pas voir la différence entre les amplitudes positives et négatives. – kwinkunks

+0

Voyez-vous une autre possibilité? Je suis d'accord que nous ne pouvons pas voir les différences, mais je dois utiliser des couleurs noir et blanc et j'ai des valeurs positives et négatives ... – user5276228

+2

Utilisez une rampe de niveaux de gris simple (blanc pour négatif est classique). – kwinkunks

Répondre

4

À mon avis, la meilleure idée est d'utiliser une rampe grise au lieu d'une colourbar divergente:

import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 

data = 2 * np.random.random((100, 100)) - 1 

plt.imshow(data, cmap='Greys', interpolation='none') 

Example of greyscale colourbar

Vous pouvez utiliser gray aussi bien, mais il est juste une version inversée et vous donnez du blanc pour les valeurs positives, ce qui n'est pas habituel pour les données sismiques.

Si vous êtes décidé à faire ce que vous demandez, je pense que le plus simple serait d'utiliser PIL pour convertir les images en niveaux de gris.

plt.imshow(data, cmap='jet', interpolation='none') 
plt.savefig('image.png') 

maintenant convertir et enregistrer:

from PIL import Image 
im = Image.open('image.png') 
im = im.convert('L') 
im.save('image_grey.png')