2013-05-06 9 views
19

में किसी विशिष्ट मान के लिए रंग को फिर से परिभाषित करने के लिए मैं imshow का उपयोग कर छवि में colormap rainbow का उपयोग करना चाहता हूं। यह पूरी तरह से काम करता है, लेकिन मैं 0 मान के लिए रंग को फिर से परिभाषित करना चाहता हूं। Violete के बजाय, मैं सफेद का उपयोग करना चाहता हूँ।matplotlib colormap

मैं इसे केवल शून्य शून्य के लिए करना चाहता हूं, अन्य सभी मान colormap में डिफ़ॉल्ट मानों के साथ रह सकते हैं।

कोई विचार नहीं बिना को मैन्युअल रूप से रंगरूप को संपादित करना है?

+1

देखें: http://stackoverflow.com/questions/16152052/matplotlib-python-change-single-color-in-colormap/16163481 –

+0

प्रश्न अलग है, mince मैं सीधे शिविर को संपादित नहीं करना चाहता ... इंद्रधनुष रंग मानचित्र के लिए परिभाषा स्पष्ट नहीं है – otmezger

+0

आपको रैंप को संपादित करने की ज़रूरत नहीं है, मेरा मतलब है कि ज़ेरोस के साथ मुखौटा सरणी बनाना और उपयोग करना 'cmap.set_bad ('सफेद')'। लेकिन वर्कअराउंड नीचे से 'cmap.set_under() 'का उपयोग करने के बराबर है। –

उत्तर

29

तुम भी set_under उपयोग कर सकते हैं जो मुझे लगता है 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) 

का उपयोग कर अधिक से अधिक अर्थ समझ में आता है आप colorbar tweak भी kwarg का उपयोग कर 'के अंतर्गत' (और सममित 'पर') रंग को दिखाने के लिए कर सकते हैं extend, example और docs देखें।

अधिक पूर्ण उदाहरण के साथ एक नकली के जवाब के लिए देखें How to create matplotlib colormap that treats one value specially?

+0

एक आकर्षण की तरह काम करता है! धन्यवाद। एकमात्र समस्या यह तथ्य है कि कलरबार सफेद नहीं दिखाएगा, लेकिन यह एक बड़ा मुद्दा नहीं है .... – otmezger

+1

(उपर्युक्त चिंता को हल करने के लिए संपादित) – tacaswell

+0

एक बार cmap को 'set_under'' के साथ संशोधित किया गया है, 'set_over' , या 'set_bad'' cmap' संशोधित है। यहां तक ​​कि अगर 'matplotlib.cm.get_cmap' का उपयोग करके पुनः प्रयास किया जाता है, तो मूल cmap संशोधित रहता है। अपने मूल राज्य में वापस कैसे जाएं? या मूल cmap को बदलने के बिना संशोधित करने के लिए एक नया तरीका बनाने का विकल्प? –