2012-03-14 13 views
35

में imshow के लिए एक अलग रंगरूपता को परिभाषित करना मेरे पास एक साधारण छवि है जिसे मैं matplotlib में imshow के साथ दिखा रहा हूं। मैं एक कस्टम कोलोराप लागू करना चाहता हूं ताकि 0-5 के बीच के मूल्य सफेद हों, 5-10 लाल (बहुत साधारण रंग) आदि हैं। मैंने इस ट्यूटोरियल का पालन करने की कोशिश की है:matplotlib

http://assorted-experience.blogspot.com/2007/07/custom-colormaps.html निम्न कोड के साथ:

cdict = { 
'red' : ((0., 0., 0.), (0.5, 0.25, 0.25), (1., 1., 1.)), 
'green': ((0., 1., 1.), (0.7, 0.0, 0.5), (1., 1., 1.)), 
'blue' : ((0., 1., 1.), (0.5, 0.0, 0.0), (1., 1., 1.)) 
} 

my_cmap = mpl.colors.LinearSegmentedColormap('my_colormap', cdict, 3) 

plt.imshow(num_stars, extent=(min(x), max(x), min(y), max(y)), cmap=my_cmap) 
plt.show() 

लेकिन यह अजीब रंग दिखाता है, और मुझे केवल 3-4 रंगों की आवश्यकता होती है जिन्हें मैं परिभाषित करना चाहता हूं। मैं यह कैसे करु?

+0

इसी प्रकार के प्रश्न: http://stackoverflow.com/questions/9451545/using-matplotlib-to-draw-color-bar-with-distinguishable-and-uncontinues-colors/9451776#9451776 –

उत्तर

64

आप सफेद और रंग नक्शे में केवल रंग के रूप में लाल निर्दिष्ट करने के लिए एक ListedColormap उपयोग कर सकते हैं, और सीमा का निर्धारण जहां संक्रमण है एक रंग से दूसरे:

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

np.random.seed(101) 
zvals = np.random.rand(100, 100) * 10 

# make a color map of fixed colors 
cmap = colors.ListedColormap(['white', 'red']) 
bounds=[0,5,10] 
norm = colors.BoundaryNorm(bounds, cmap.N) 

# tell imshow about color map so that only set colors are used 
img = plt.imshow(zvals, interpolation='nearest', origin='lower', 
        cmap=cmap, norm=norm) 

# make a color bar 
plt.colorbar(img, cmap=cmap, norm=norm, boundaries=bounds, ticks=[0, 5, 10]) 

plt.savefig('redwhite.png') 
plt.show() 

परिणामी आंकड़ा है केवल दो रंगों: 2D grid data visualization in Python

:

enter image description here

मैं अनिवार्य रूप से कुछ अलग प्रश्न के लिए एक ही बात का प्रस्ताव 10

समाधान matplotlib example से प्रेरित है। उदाहरण बताता है कि bounds उपयोग किए गए रंगों की संख्या से अधिक होना चाहिए।

BoundaryNorm एक सामान्यीकरण है जो पूर्णांक को मानों की एक श्रृंखला को मानचित्र करता है, जिसका उपयोग संबंधित रंगों को निर्दिष्ट करने के लिए किया जाता है। cmap.N, ऊपर दिए गए उदाहरण में, केवल रंगों की संख्या को परिभाषित करता है।