2012-11-28 24 views
15

मैं इस कोड का उपयोग एक नक्शे पर डेटा की साजिश रचने कर रहा हूँ:matplotlib/Basemap pcolor साजिश में सफेद किनारों को हटा दें

import numpy as np 
import matplotlib as mpl 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
from mpl_toolkits.basemap import Basemap 
from matplotlib.patches import Polygon 
from scipy.io import netcdf 

ncfile = netcdf.netcdf_file(myfile.nc,'r') 
lon = ncfile.variables['longitude'][:] 
lat = ncfile.variables['latitude'][:] 
data = ncfile.variables['mydata'][:] 
ncfile.close() 

m = Basemap(projection='nplaea', boundinglat=40, lon_0=270) 
m.drawcoastlines(linewidth=.6, zorder=2) 
m.drawparallels(np.arange(-80.,81.,20.), zorder=1) 
m.drawmeridians(np.arange(-180.,181.,20.), zorder=1) 
cNorm = mpl.colors.Normalize(vmin=0, vmax=np.nanmax(data)) 
cmap = plt.get_cmap('jet') 
lons, lats = np.meshgrid(lon, lat) 
x, y = m(lons, lats) 
datamap = m.pcolor(x, y, data, zorder=0) 
datamap.set_norm(cNorm) 
plt.colorbar(datamap, cmap=cmap, norm=cNorm, shrink=0.5) 
plt.savefig('figures/map_polar.png', dpi=150, bbox_inches='tight', pad_inches=0.4) 

यह इस छवि में परिणाम: enter image description here

जैसा कि आप देख सकते हैं, वहाँ सफेद अंतराल हैं ग्रिड कोशिकाओं के बीच। मैं उनसे पीछा कैसे छुड़ाऊं?

+0

क्या आप डेटा फ़ाइल को कहीं भी रख सकते हैं? – tacaswell

+0

दुर्भाग्यवश, नहीं, लेकिन यह नियमित रूप से ग्रिड किए गए डेटा को स्थानांतरित करता है .. – HyperCube

+0

जो भी इसके लायक है, मैं यादृच्छिक रूप से जेनरेट (या निरंतर) डेटा का उपयोग करके आपकी समस्या को पुन: उत्पन्न नहीं कर सकता ... matplotlib का आप किस संस्करण का उपयोग कर रहे हैं? शायद यह एक बग तय किया गया है? इसके अलावा, इस मामले में 'पोंकोर्मेश' तेज होगा। 'Pcolor' के बजाय इसका उपयोग करने का प्रयास करें। मुझे संदेह है (?) यह आपकी समस्या को ठीक करेगा, लेकिन यह तेज होना चाहिए, भले ही। –

उत्तर

2

मुझे एक ही समस्या थी। यह संभावना है कि समस्या longitude में है। सुनिश्चित करें कि 0 और 360 दोनों इनपुट में मौजूद हैं। यदि नहीं, मैन्युअल रूप से उन्हें जोड़ें, और तदनुसार mydata में परिवर्तन करें ताकि उनके पास एक ही आकार हो।

+0

मैं -180, 180 की एक श्रृंखला का उपयोग कर रहा हूं। यह भी काम करना चाहिए?दरअसल, 180 गुम था, इसलिए मैंने इसे जोड़ा और डेटा के अंतिम कॉलम को फिर से डेटा में कॉपी किया। हालांकि, सफेद धारियां अभी भी बनी हुई हैं। – HyperCube

3

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैंने सोचा कि मैं इस समस्या का समाधान जोड़ूंगा। मैं आपके सवाल का जब मैं ठीक उसी समस्या हो रही थी पाया के रूप में तुम्हारा, यानी मेरी साजिश और एक ग्रिड -180 से 180 के लिए जा रहा में एक सफेद लाइन मेरे लिए समाधान Basemap समारोह का उपयोग किया गया addcyclic

from mpl_toolkits.basemap import Basemap, shiftgrid, addcyclic 
SSTcyclic, lonCMIP5cyclic = addcyclic(SST, lonCMIP5) 

यह मेरी समस्या हल हो गई। चीयर्स, ट्रॉन्ड

2

ऐसा लगता है कि मूल पोस्ट वास्तव में 0 और 360 डिग्री के बीच सफेद क्षेत्र के बारे में नहीं पूछ रहा है।

मुझे लगता है कि ओपी रंग के प्रत्येक वर्ग जो this bug के अनुरूप होगा के बीच लाइनों के बारे में बात कर रही है:

ऐसा लगता है कि एक पीडीएफ प्रारूप करने के लिए एक pcolor साजिश savig हमेशा ग्रिडलाइनें भी शामिल है, जो नहीं है

मैं में ग्रिडलाइनें देखें:

png यहाँ जैसे अन्य उत्पादन प्रारूपों के लिए सच डेवलपर्स समस्या के बारे में क्या कहते हैं है जीएस में परिणामस्वरूप छवि, xpdf preview.app लेकिन एडोब रीडर में नहीं। जब मैं पूर्वावलोकन में ज़ूम करता हूं, तो लाइनें थोड़ा सा, पर कूदती हैं और ज़ूम स्तर पर ध्यान दिए बिना स्क्रीन पर हमेशा समान चौड़ाई होती हैं।

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

तो यह व्यूअर के साथ एक समस्या है, pcolor या matplotlib के किसी भी अन्य पहलू के साथ नहीं।