2013-06-20 21 views
7

Başka bir konudaki yardımınızla bazı global haritaları çizmeyi başardım. Önce meteorolojik GRIB2 verilerini Netcdf'ye dönüştürüp global haritaları çiziyorum.R kırpma tarama verileri ve ayarlanan eksen sınırları

Şimdi haritanın yalnızca bir alt bölgesini çizmek istiyorum. Ürün komutunu denedim ve global nc dosyasının alt bölgesini başarıyla çıkardım. Fakat çizerken eksen sınırlarını nasıl kontrol edeceğimi bulamıyorum. Veri bölgesinden daha büyük bir harita çiziyor, böylelikle her iki tarafta da büyük beyaz boşluklar ortaya çıkıyor.

Bu

Ben haritalar bu çıktıyı vermek
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() 

çizmek için kullanıyorum komut dosyasıdır.

cropped plot

Basit bir biri olmalı ama basit R kullanıcısıyım. Şimdiden teşekkürler.

DÜZENLEME: Yeni çıktı olarak xlim = c (-40,40) eklendiğinde, ylim = c (20,90) önerildiği gibi. Bu sorunu çözmez gibi görünüyor. Ancak haritaya sığacak şekilde boyut ayarlayabildiğim için, çıktı png dosyasının x, y boyutu ile oynamak ümit vericidir. Eminim ki bulamadığım başka bir çözüm de olabilir.

enter image description here

+0

Sadece mesela senin 'plot' komutları, bir' xlim' ve 'ylim' ekleyin: Eğer latticeExtra::layer yaklaşımı tercih ederse, bu kod ile benzer bir sonuç elde edebilirsiniz arsa (...., xlim = c (-10,30), ylim = c (30, 80)) Ve bu arada güzel bir arsa, +1 –

+0

Belki googleVis paketine bir göz atın. Yardım edeceğinden emin değil ama oldukça düzgün. Belki de yardımcı olabilecek IntensityMap, GeoMap ve Map işlevlerini içerir. –

+0

Merhaba @ SimonO101 Bu, her ikisini de denediğinden emin değil, mahsulü incelemeden önce ilk denememdi. Şimdi işte değil, bir deneyecek. Çok teşekkür ederim. – pacomet

cevap

9

veri dosyasını indirdikten sonra, raster ile doğrudan okuyabilir. Eğer istenilen ölçüde elde etmek crop kullanmak böylece

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 

Sen bütün kapsamını gerekmez: Ben this table göre ne ihtiyaçtır (yanılmıyorsam eğer) o bandı 221 seçim

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

Ben başarılı olamadı plot ile tt raster görüntülemek için çalıştık.

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))) 

ve paletini değiştirmek: Şimdi idari sınırları eklemek zorunda

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

spplot(tt) 

: Eğer (89.5 yerine 90) bir farklı ölçüde kullanırsanız Ancak, spplot ile düzgün çalışır

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 Öneriniz iyi çalışıyor. Eksen, başlık ve benzeri için ek spplot seçenekleri arayacağım ... Teşekkürler – pacomet

+0

Ben hala arsa ile bir çözüm arayacak. – pacomet

İlgili konular