2013-05-06 10 views
19

rainbow colormap özelliğini imshow kullanarak bir görüntüde kullanmak istiyorum. Mükemmel çalışır, ancak 0 değerinin rengini yeniden tanımlamak istiyorum. Menekşe yerine beyaz kullanmak istiyorum.Matplotlib colormap'de belirli bir değer için rengin nasıl yeniden tanımlanması

Bunu yalnızca sıfır değeri için yapmak istiyorum, diğer tüm değerler de colormap'deki varsayılan değerlerle kalabilir.

olmadan bu nasıl yapılır herhangi bir fikir colormap el ile düzenlemek zorunda?

+1

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

+0

soru farklı, mince kampı doğrudan düzenlemek istemiyorum ... Gökkuşağı rengi haritası tanımı açık değil – otmezger

+0

Hiç rampa düzenlemek zorunda değilsiniz, maskeli bir dizi oluşturmak için sıfırlar maskeli ve kullanmak '' cmap.set_bad (beyaz). Ancak, geçici çözüm, aşağıda cmap.set_under() işlevini kullanmanın eşdeğeridir. –

cevap

29

Ayrıca ben de kwarg kullanarak altında '(ve 'aşırı' simetrik) renk göstermeye Colorbar çimdik 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) 

kullanmaktan daha anlamsal mantıklı düşünmek hangi set_under kullanabilirsiniz extend, bkz. example ve docs. daha tam örneklerle tekrarlayanı bir cevap için

bkz How to create matplotlib colormap that treats one value specially?

+0

bir çekicilik gibi çalışır! Teşekkürler. Tek sorun, colorbar'ın beyazı göstermeyeceği gerçeğidir, ancak bu büyük bir sorun değildir. – otmezger

+1

(yukarıdaki endişeyi gidermek için düzenlenmiştir) – tacaswell

+0

Cmap, "set_under", "set_over" ile değiştirildikten sonra veya 'set_bad'' cmap' değiştirilir. Yeniden 'matplotlib.cm.get_cmap' kullanılarak yeniden ayarlanmış olsa bile, orijinal cmap değiştirilmiş olarak kalır. Orijinal haline nasıl geri dönülür? Veya alternatif, orijinal cmap'i değiştirmeden yeni bir tane nasıl değiştirilir? –

İlgili konular