2012-04-12 12 views
18

में ओवरले इम्शो प्लॉट्स मैं अंतर को देखने में आसान बनाने के लिए एक ही इम्शो प्लॉट पर डेटा के दो अलग-अलग सेटों की तुलना करना चाहता हूं। मेरी पहली वृत्ति रंग मैप पारदर्शी (कम मूल्यों विशेष रूप से) में रंग बनाने के लिए है, लेकिन मैं यह काम करने के लिए प्राप्त करने में सक्षम नहीं किया गया है:matplotlib

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

# create dummy data 
zvals = np.random.rand(100,100)*10-5 
zvals2 = np.random.rand(100,100)*10-5 

# generate the transparent colors 
color1 = colorConverter.to_rgba('white',alpha=0.0) 
color2 = colorConverter.to_rgba('black',alpha=0.8) 

# make the colormaps 
cmap1 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap',['green','blue'],256) 
cmap2 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap2',[color1,color2],256) 

img2 = plt.imshow(zvals,interpolation='nearest',cmap=cmap1,origin='lower') 
img3 = plt.imshow(zvals2,interpolation='nearest',cmap=cmap2,origin='lower') 

plt.show() 

कोई त्रुटि नहीं है लेकिन सफेद और काले दूसरी साजिश कोई पारदर्शिता नहीं दिखाती है। मैंने सामान्य plt.plot स्थिति में रंग सेट करने के लिए रंग कनवर्टर विधि भी कोशिश की और सही रंग प्रदर्शित होने के बावजूद भी रंग पारदर्शी नहीं हुआ।

कैसे उपरिशायी/imshow भूखंडों की तुलना करने पर कोई अतिरिक्त सलाह ज्यादा अपने imshow आदेश में

+1

आप दो छवि डेटा सेट के घटाव क्यों साजिश नहीं है? या एक प्रासंगिक परिवर्तन का घटाव, जैसे उन्हें एक डेसिबल पैमाने में परिवर्तित करना। – ely

+0

अब तक मुझे इस विधि के साथ बहुत अच्छे नतीजे नहीं मिले हैं, लेकिन मैं उम्मीद कर रहा हूं कि कोई व्यक्ति जानता है कि काम करने के लिए व्यक्तिगत रंग पारदर्शिता कैसे प्राप्त करें – Anake

उत्तर

27

आप alpha तर्क सेट कर सकते हैं की सराहना की जाएगी।

अपने उदाहरण में, img3 = plt.imshow(zvals2, interpolation='nearest', cmap=cmap2, origin='lower', alpha=0.6)

संपादित करें:

स्पष्टीकरण के लिए धन्यवाद।

  • सबसे पहले, एक matplotlib colormap वस्तु (, सफेद और काले रंग के लिए अपने मामले में, आप 'बाइनरी' रंग मैप ले जा सकते हैं) का चयन: यहाँ आप क्या कर सकते हैं का वर्णन है। या जैसा आपने किया था, अगर आप जिस रंगमंच को चाहते हैं, वह आपके स्वयं के रंगरूप बनाते हैं।
  • फिर इस कोलोमाप ऑब्जेक्ट को प्रारंभ करें: इससे आंतरिक रूप से "_lut" नामक एक सरणी बन जाएगी जो आरजीबीए मान रखती है।
  • उसके बाद, आप आप क्या हासिल करना चाहते हैं (अपने उदाहरण में, 0 से 0.8 करने के लिए एक सरणी बनाने)
  • फिर आप इस रंग मैप

नीचे का उपयोग कर सकते के अनुसार अल्फा मूल्यों भर सकते हैं एक उदाहरण है अपने कोड का उपयोग:

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

# create dummy data 
zvals = np.ones((100,100))# np.random.rand(100,100)*10-5 
zvals2 = np.random.rand(100,100)*10-5 

# generate the colors for your colormap 
color1 = colorConverter.to_rgba('white') 
color2 = colorConverter.to_rgba('black') 

# make the colormaps 
cmap1 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap',['green','blue'],256) 
cmap2 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap2',[color1,color2],256) 

cmap2._init() # create the _lut array, with rgba values 

# create your alpha array and fill the colormap with them. 
# here it is progressive, but you can create whathever you want 
alphas = np.linspace(0, 0.8, cmap2.N+3) 
cmap2._lut[:,-1] = alphas 

img2 = plt.imshow(zvals, interpolation='nearest', cmap=cmap1, origin='lower') 
img3 = plt.imshow(zvals2, interpolation='nearest', cmap=cmap2, origin='lower') 

plt.show() 

image

+2

क्षमा करें मैं स्पष्ट नहीं था, मैं विशेष रूप से बहुत कुछ करना चाहता हूं मानों के लिए 0 के करीब कम अल्फा मान ताकि पृष्ठभूमि नीचे की साजिश के रंग को कवर न करे। – Anake

+0

के अनुसार संपादित किया है मैंने इस स्पष्टीकरण के प्रकाश में अपना जवाब संपादित किया है। संपादन के लिए – gcalmettes

+0

+1। ऐसा लगता है कि LinearSegmentedColormap, आदि अल्फा मानों के लिए काम नहीं करते हैं, और आपका एक अच्छा काम है। – tom10