2012-03-21 19 views
7

में एक contourf साजिश का मुखौटा हिस्सा मैं contourf का उपयोग कर matplotlib में एक भरे समोच्च साजिश का उत्पादन करने की कोशिश कर रहा हूँ। साजिश के नीचे एक जंजीर पैटर्न में डेटा गायब है। समोच्च साजिश न केवल खाली हो जाती है, जहां मूल डेटा मास्क किया जाता है, लेकिन जेब में भी जहां समोच्च एल्गोरिदम साफ-सफाई नहीं कर सकता क्योंकि अच्छे डेटा का अपर्याप्त पड़ोस है।matplotlib

मुझे पता है कि इन जेबों में व्यावहारिक रूप से उत्पादन करने के लिए डेटासेट का विस्तार कैसे किया जाता है। हालांकि, अगर मैं विस्तारित डेटा प्लॉट करता हूं तो मुझे हर जगह समोच्च भर जाता है। मैं उन क्षेत्रों को मुखौटा करना चाहता हूं जहां मूल डेटा काला या सफेद में गायब था।

पिछले धागे पर मैंने पहली छवि को साजिश करके एक छवि के लिए यह कैसे करना है और फिर इसे खराब छवियों के मुखौटे के साथ एक और छवि के साथ कवर करना सीख लिया। एनालॉग नीचे कोड स्निपेट होगा लेकिन यह एक समोच्च के लिए काम नहीं करता है ... मैं विस्तारित contourf साजिश को कवर करने के लिए bad_data imshow नहीं प्राप्त कर सकता। क्या यह संभव है?

धन्यवाद, एली

import matplotlib.pyplot as plt 
lev = [0.0,0.1,0.2,0.5,1.0,2.0,4.0,8.0,16.0,32.0]   
norml = colors.BoundaryNorm(lev, 256) 
# this is the contour plot, using extended_data so that the contours are plausibly extended 
cs = plt.contourf(x,z,extended_data,levels = lev, cmap = cm.RdBu_r,norm = norml) 
# now the attempt to cover it up -- but imshow will not cover up the original plot as it will with another image 
bad_data = np.ma.masked_where(~data.mask, data.mask, copy=True) 
plt.imshow(bad_data, interpolation='nearest', aspect = 'auto', cmap=cm.gray) 
plt.show() 
+0

मैं इस पोस्ट मुझे एहसास हुआ कि मैं इस क्षेत्र से बाहर ब्लॉक करने के लिए क्षेत्र और उपयोग को भरने() की पहचान कर सकता है के बाद से है कि जोड़ना चाहिए। तो तात्कालिकता कम है, हालांकि यह जानना मूल्यवान होगा कि यह किया जा सकता है या नहीं। –

+0

मान लीजिए कि आपके पास 5x5 सरणी है, और सूचकांक [1, 1] गायब था, आप क्या देखने की उम्मीद करेंगे? सूचकांक [1, 1] मार्कर के रूप में खींचा जाएगा? – pelson

+1

क्या आप एक न्यूनतम कामकाजी उदाहरण पोस्ट कर सकते हैं? – EnricoGiampieri

उत्तर

10

मुझे सही अगर मैं गलत हूँ लेकिन जैसा कि मैं समझता हूँ कि आप इस स्थिति है:

import numpy as np 
import matplotlib.pyplot as plt 
# generate some data with np.nan values (the missing values) 
d = np.random.rand(10, 10) 
d[2, 2], d[3, 5] = np.nan, np.nan 
# and in your case you actually have masked values too: 
d = np.ma.array(d, mask=d < .2) 
# now all of the above is just for us to get some data with missing (np.nan) and 
# masked values 

contourf के साथ ऊपर की साजिश रचने के द्वारा,

plt.contourf(d) 
plt.show() 

मुझे मिलता है:

enter image description here

जो प्रदर्शित नहीं करता है (खाली) नकाबपोश मूल्यों (घ < .2) और न ही np.nan मूल्यों (घ [2, 2], डी [3, 5])! और आप matplotlib के लिए केवल मुखौटा मूल्यों को दिखाने के लिए नहीं चाहते हैं। इसलिए हम यह कर सकते हैं: कितनी तेजी से नकाबपोश सरणी का उपयोग कर

# the following line is replaced by your interpolation routine for 
# removing np.nan values 
d[np.isnan(d)] = 1 
# then because we use the masked array only the masked values will still be masked 
# but the np.nan values which were replaced through the interpolation algorithm 
# will show up if we do the contourf plot 
plt.contourf(d) 
plt.show() 

enter image description here

मैं नहीं जानता कि इस मामले में है, लेकिन वैसे भी यह कैसे मैं यह कर होता है। आप खाली स्पॉट के बजाय (तिनका) एक अलग रंग चाहते हैं तो आप नीचे कुल्हाड़ियों का पैच रंग करने के लिए क्योंकि contourf वास्तव में कुछ भी साजिश नहीं है, जहां कोई डेटा, या नकाबपोश डेटा उपलब्ध होने की जरूरत है:

# make the background dark gray (call this before the contourf) 
plt.gca().patch.set_color('.25') 
plt.contourf(d) 
plt.show() 

को मिलती है:

enter image description here