2013-05-21 98 views
2

从Joe Wheatley(http://joewheatley.net/ncep-global-forecast-system/)的精彩帖子开始,我设法生成了一张 温度全球地图。但是,我没有只绘制海岸线,而是试图使用maptools软件包来绘制国家边界。 问题出现在只绘制东半球国家边界时。我应该失去一些我无法弄清楚的东西, 仍然在寻找stackoverflow和谷歌。希望你能帮助。使用maptools绘制国家边界 - R

这里是我使用(大部分来自乔的职位来)

loc=file.path("ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.2013052100/gfs.t00z.sfluxgrbf03.grib2") 
download.file(loc,"temp.grb",mode="wb") 

system("wgrib2 -s temp.grb | grep :TMP: | wgrib2 -i temp.grb -netcdf TMP.nc",intern=T) 
system("wgrib2 -s temp.grb | grep :LAND: | wgrib2 -i temp.grb -netcdf temp.nc",intern=T) 

library(ncdf) 
landFrac <-open.ncdf("LAND.nc") 
lon <- get.var.ncdf(landFrac,"longitude") 
lat <- get.var.ncdf(landFrac,"latitude") 

temp=open.ncdf("TMP.nc") 
t2m.mean <- get.var.ncdf(temp,"TMP_2maboveground") 


library("fields") 
library("sp", lib.loc="/usr/lib/R/site-library") 
library("maptools", lib.loc="/usr/lib/R/site-library") 

day="DIA" 

png(filename="gfs.png",width=1215,height=607,bg="white") 

rgb.palette <- colorRampPalette(c("snow1","snow2","snow3","seagreen","orange","firebrick"), space = "rgb")#colors 
image.plot(lon,lat,t2m.mean,col=rgb.palette(200),main=as.expression(paste("GFS 24hr Average 2M Temperature",day,"00 UTC",sep="")),axes=T,legend.lab="o C") 
data(wrld_simpl) 
plot(wrld_simpl, add = TRUE) 

dev.off() 

的代码,这是产生的图像

enter image description here

这是一个全球性的地图,我应该使用xlim和ylim在image.plot中提取一个区域(即欧洲)

编辑:添加了temp的网址。 NC文件

http://ubuntuone.com/29DKAeRjUCiCzLblgfSLc9

任何帮助,将不胜感激,谢谢

回答

8

的数据集wrld_simpl是在经度对准[-180,180],但网格的数据显然是[0,360]。既然你有maptools装试试这个来修改副本添加到您的情节:

plot(elide(wrld_simpl, shift = c(360, 0)), add = TRUE) 

还有其他的工具来裁剪和移动/合并和recentre数据这样的,包括旋转在包光栅?这真的取决于你需要什么。

另一个图形的选择是只使用“world2”的地图包

library(maps) 
map("world2", add = TRUE) 

无论是那些将工作完成你的情节上面开始。

下面是与此相关的另一个讨论:Fixing maps library data for Pacific centred (0°-360° longitude) display

+0

优秀的答案,一如往常。 –

+0

嗨,'plot(elide(wrld_simpl,shift = c(360,0)),add = TRUE)'substitute' plot(wrld_simpl,add = TRUE)'?谢谢。 – pacomet

+0

几乎完美的解决方案。但现在,在地图之外的边界被绘制出来,就在传说的右侧。欧洲边界不仅出现在地图左侧,而且出现在右侧。 – pacomet

3

你可以这样做:

library(raster) 
r <- raster("temp.nc") 
r <- rotate(r) 
plot(r) 
+0

嗨@RobertH这正是我正在寻找的。现在地图很好。非常感谢你。 – pacomet