2013-06-20 4 views
7

किसी अन्य धागे में आपकी सहायता से मैंने कुछ वैश्विक मानचित्रों को साजिश करने में कामयाब रहा है। सबसे पहले मैं मौसम विज्ञान जीआरबीबी 2 डेटा को Netcdf में परिवर्तित करता हूं और फिर वैश्विक मानचित्रों को साजिश करता हूं।आर फसल रास्टर डेटा और सेट अक्ष सीमा

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

यह स्क्रिप्ट मैं नक्शे

library("ncdf") 
library("raster") 
library("maptools") 

DIA=format(Sys.time(), "%Y%m%d00") # Data d'avui 
url=sprintf("ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.%s/gfs.t00z.pgrb2f00", DIA) # Ruta del ftp 
loc=file.path(sprintf("%s",url)) 
download.file(loc,"gfs.grb",mode="wb") 

system("/usr/bin/grib2/wgrib2/wgrib2 -s gfs.grb | grep :TMP: | /usr/bin/grib2/wgrib2/wgrib2 -i gfs.grb -netcdf temp.nc",intern=T) 

t2m <- raster("temp.nc", varname = "TMP_2maboveground") 
rt2m <- rotate(t2m) 
t2mc=rt2m-273.15 

DAY=format(Sys.time(), "%Y%m%d") # Data d'avui 

e=extent(-40,40,20,90) 
tt=crop(t2mc,e) 

png(filename="gfs.png",width=700,height=600,bg="white")  
    rgb.palette <- colorRampPalette(c("snow1","snow2","snow3","seagreen","orange","firebrick"), space = "rgb")#colors 
    plot(tt,col=rgb.palette(200),main=as.expression(paste("Temperatura a 2m ",DAY," + 00 UTC",sep="")),axes=T) 
dev.off() 

है कि इस निर्गम प्लॉट करने के लिए उपयोग कर रहा हूँ है।

cropped plot

यह एक सरल एक हो गया है, लेकिन मैं एक साधारण आर प्रयोक्ता हूँ। अग्रिम में धन्यवाद।

संपादित करें: xlim = c (-40,40), ylim = c (20,90) जोड़ते समय नया आउटपुट सुझाए गए अनुसार। ऐसा लगता है कि यह समस्या को ठीक नहीं करता है। लेकिन आउटपुट पीएनजी फ़ाइल के एक्स, वाई आकार के साथ खेलना वादा करता है क्योंकि मैं मानचित्र को फिट करने के लिए आकार समायोजित कर सकता हूं। निश्चित रूप से इसे एक और समाधान होना चाहिए, सही मुझे नहीं मिल सकता है।

enter image description here

+0

बस अपने 'plot' आदेश, जैसे के लिए एक' xlim' और एक 'ylim' जोड़ें:आप latticeExtra::layer प्रक्रिया अपनाते हैं, तो आप इस कोड के साथ एक समान परिणाम प्राप्त कर सकते हैं 'प्लॉट (...., xlim = c (-10,30), ylim = c (30, 80)) 'और रास्ते से अच्छी साजिश, +1 –

+0

शायद googleVis पैकेज पर नज़र डालें। यकीन नहीं है कि यह मदद करेगा लेकिन यह बहुत साफ है। इसमें तीव्रता मैप, जियोमैप और मानचित्र फ़ंक्शन शामिल हैं जो शायद मदद कर सकते हैं। –

+0

हाय @ साइमन ओ 101 यह फसल को देखने से पहले मेरा पहला प्रयास था, यकीन नहीं कि दोनों की कोशिश की गई है। काम पर नहीं, कोशिश करेंगे। आपका बहुत बहुत धन्यवाद। – pacomet

उत्तर

9

डेटा फ़ाइल डाउनलोड करने के बाद, मैं रेखापुंज के साथ सीधे पढ़ सकते हैं। मैं बैंड 221 चुनें कि (यदि मैं गलत नहीं हूँ) यह क्या आप को this table अनुसार की जरूरत है:

library("raster") 
t2mc <- raster('gfs.grb', band=221) 

> t2mc 
class  : RasterLayer 
band  : 221 (of 315 bands) 
dimensions : 361, 720, 259920 (nrow, ncol, ncell) 
resolution : 0.5, 0.5 (x, y) 
extent  : -0.25, 359.75, -90.25, 90.25 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=longlat +a=6371229 +b=6371229 +no_defs 
data source : /home/oscar/gfs.grb 
names  : gfs 

आप पूरी हद तो आप crop का उपयोग वांछित हद तक प्राप्त करने की आवश्यकता नहीं है:

e <- extent(-40,40,20,90) 
tt <- crop(t2mc,e) 

मैं सफलता के बिना plot साथ tt रेखापुंज प्रदर्शित करने के लिए कोशिश की है। हालांकि, यह spplot साथ ठीक से काम करता है, तो आप एक अलग हद तक (90 का 89.5 बजाय) का उपयोग:

library(maps) 
library(mapdata) 
library(maptools) 

ext <- as.vector(e) 
boundaries <- map('worldHires', 
        xlim=ext[1:2], ylim=ext[3:4], 
        plot=FALSE) 
boundaries <- map2SpatialLines(boundaries, 
           proj4string=CRS(projection(tt))) 

और पैलेट बदलने के लिए:: अब हम प्रशासनिक सीमाओं जोड़ने के लिए

e <- extent(-40,40,20,89.5) 
tt <- crop(t2mc,e) 

spplot(tt) 

rgb.palette <- colorRampPalette(c("snow1","snow2","snow3","seagreen","orange","firebrick"), 
           space = "rgb") 

spplot(tt, col.regions=rgb.palette, 
     colorkey=list(height=0.3), 
     sp.layout=list('sp.lines', boundaries, lwd=0.5)) 

spplot result

library(rasterVis) 
levelplot(tt, col.regions=rgb.palette, 
      colorkey=list(height=.3)) + 
    layer(sp.lines(boundaries, lwd=0.5)) 
+0

Gracias @ oscar-perpinan आपका सुझाव ठीक काम करता है। मैं अक्ष, शीर्षक और इतने पर अतिरिक्त स्पप्लॉट विकल्पों की तलाश कर रहा हूं ... धन्यवाद – pacomet

+0

मैं अभी भी साजिश के साथ समाधान की तलाश करूंगा। – pacomet

संबंधित मुद्दे