2013-05-06 14 views
19

Desidero utilizzare la mappa colori rainbow in un'immagine utilizzando imshow. Funziona perfettamente, ma voglio ridefinire il colore per il valore 0. Invece di violete, voglio usare il bianco.Come ridefinire un colore per un valore specifico in una mappa colori matplotlib

Voglio farlo solo per il valore zero, tutti gli altri valori possono rimanere con i valori predefiniti nella mappa colori.

Qualche idea su come fare questo senza dover modificare manualmente la mappa dei colori?

+1

See: http://stackoverflow.com/questions/16152052/matplotlib-python-change-single-color-in-colormap/16163481 –

+0

Il la domanda è diversa, non voglio modificare direttamente il campo ... La definizione per la mappa dei colori dell'arcobaleno non è esplicita – otmezger

+0

Non è necessario modificare la rampa del tutto, intendevo creare un array mascherato con zeri mascherati e usare il 'cmap.set_bad ('bianco')'. Ma la soluzione alternativa è una sorta di equivalente all'uso di 'cmap.set_under()' dal basso. –

risposta

29

È anche possibile utilizzare set_under che credo abbia senso più semantico rispetto all'utilizzo set_bad

my_cmap = matplotlib.cm.get_cmap('rainbow') 
my_cmap.set_under('w') 
imshow(np.arange(25).reshape(5, 5), 
     interpolation='none', 
     cmap=my_cmap, 
     vmin=.001) 

È possibile modificare il colorbar per mostrare anche la 'voce' (e la simmetrica 'over') colore utilizzando il kwarg extend, vedere example e docs.

di una risposta a un duplicato con gli esempi più completi vedere How to create matplotlib colormap that treats one value specially?

+0

funziona come un fascino! Grazie. l'unico problema è il fatto che la barra dei colori non mostrerà il bianco, ma questo non è un grosso problema ... – otmezger

+1

(modificato per rispondere alle precedenti preoccupazioni) – tacaswell

+0

Una volta che la cmap viene modificata con 'set_under',' set_over' , o 'set_bad' il' cmap' viene modificato. Anche se riutilizzato di nuovo usando 'matplotlib.cm.get_cmap', il cmap originale rimane modificato. Come tornare al suo stato originale? Oppure alternativa a come crearne uno nuovo da modificare senza modificare il cmap originale? –

Problemi correlati