栅格和ggplot地图在R中排列不完整

时间:2016-03-18 19:15:54

标签: r ggplot2 gis raster

我正在尝试使用ggplot2绘制空间栅格。

require(raster)
require(ggplot2)

下载数据,使用raster包加载为栅格。有关此数据产品的更多详细信息,请参见here。然后将栅格转换为点,以便与ggplot一起使用。

system('wget https://www.dropbox.com/s/7jsdqgc9wjcdznv/NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt') 
layer<- raster("path/to/raster/NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt") #you need to specify your own path here, wherever the downloaded file is saved. 
raster.points <- rasterToPoints(layer)
raster.points <- data.frame(raster.points)
colnames(raster.points) <-c('x','y','layer')

现在使用ggplot2制作地图,然后躺在栅格上。

mp <- NULL
#grab US map and choose colors
map.US <- borders("usa", colour='white',fill='black', lwd=0.4)
mp <- ggplot(data=raster.points, aes(y=y, x=x)) 
mp <- mp + map.US
mp <- mp + geom_raster(aes(fill=layer)) 
mp <- mp + theme(axis.text.y=element_blank(),
                axis.text.x=element_blank(),
                axis.title.y=element_blank(),
                axis.title.x=element_blank(),
                axis.ticks=element_blank(), 
                panel.background = element_rect(fill='black'),
                plot.background = element_rect(fill='black'),
                panel.grid.major=element_blank(),
                panel.grid.minor=element_blank())
mp

输出如下:

enter image description here

正如您所看到的,几乎排队,但并不完全。一切都略微向右移动。可能导致此问题的原因以及如何解决?

2 个答案:

答案 0 :(得分:4)

遵循ORNL文档,Ndep图的边界实际上与网格的左下角对齐。要获得与中间点对齐的x和y位置(默认为ggplot),您需要将x位置移动1个网格间隔。因为在这种情况下网格间隔是0.5度,我从我的x坐标向量中减去了半度。

@ 42在评论中提出了这个问题的解决方案。

所以,和以前一样,下载数据:

system('wget https://www.dropbox.com/s/7jsdqgc9wjcdznv/NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt') 
layer<- raster("path/to/raster/NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt") #you need to specify your own path here, wherever the downloaded file is saved. 
raster.points <- rasterToPoints(layer)
raster.points <- data.frame(raster.points)
colnames(raster.points) <-c('x','y','layer')

至关重要的是,从坐标的x向量减去半度。

raster.points$x <- raster.points$x - 0.5

现在,继续并绘制:

mp <- NULL
#grab US map and choose colors
map.US <- borders("usa", colour='white',fill='black', lwd=0.4)
mp <- ggplot(data=raster.points, aes(y=y, x=x)) 
mp <- mp + map.US
mp <- mp + geom_raster(aes(fill=layer)) 
mp <- mp + theme(axis.text.y=element_blank(),
                axis.text.x=element_blank(),
                axis.title.y=element_blank(),
                axis.title.x=element_blank(),
                axis.ticks=element_blank(), 
                panel.background = element_rect(fill='black'),
                plot.background = element_rect(fill='black'),
                panel.grid.major=element_blank(),
                panel.grid.minor=element_blank())
mp
全部排好了! enter image description here

答案 1 :(得分:2)

根据42和colin的说法,ORNL提供的文件不正确。你应该告诉他们这件事。该文件包含:

xllcorner -124
yllcorner 25

显然应该是:

xllcorner -124.5
yllcorner 25

如果是,则表示该文件当前将x坐标指定为单元格边,将y坐标指定为单元格中心。任何标准都不好。有些格式可以让x和y都代表单元格边缘而不是单元格中心,但不是两者之一;无论哪种方式,在使用的文件格式(arc-ascii)中都不允许这样做。

纠正此错误的一种好方法是在创建shift后使用RasterLayer

layer < raster("NADP_wet_deposition_nh4_0.5x0.5_grid_annual_R1.txt")
layer <- shift(layer, -0.5, 0)

然后继续。这是一种更通用的解决方案,因为它允许将栅格数据正确用于ggplotting之外的其他目的。