如何在ggplot中映射栅格正确的投影?

时间:2018-11-29 15:21:26

标签: r ggplot2

我想使用Albers坐标绘制美国栅格,其代码如下:

#both shp_f and ras_f are WGS84 coordination
shp_f <- 'USA.shp'
ras_f <- 'USA.tif'
Albers <- crs('+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 
       +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs' )

shp <- readOGR(shp_f)
#convert raster cells as dataframe
ras_df <- ras_f %>% raster %>% rasterToPoints %>% as.data.frame
colnames(ras_df) <- c('x','y','val')

bm <- ggplot()+
  geom_tile(data=ras_df,aes(x=x,y=y,fill=val))+
  geom_polygon(data=shp,aes(x=long,y=lat,group=group),colour='grey',
           fill=NA,linetype='solid',size=0.1)+
  # convert plot coordination 
  ggalt::coord_proj(Albers) 

这是常见的带有弧形纬度线的阿尔伯斯投影图,并且 xy标签为lon / lat度。我希望像这样绘制地图,但是绘制时间太长,因为在ggplot中转换每个像元坐标很慢,特别是在高栅格分辨率时。因此,我认为先更改栅格投影,然后再绘制。因此,第二部分的代码如下:

enter image description here

#convert shape polygon coordination  from WGS84 to Albers
shp_albers <- spTransform(shp, Albers)
ras_df <- ras_f %>% raster 
       #convert the raster coordination from WGS84 to Albers
        %>% projectRaster(., res=50000,crs=Albers) 
        %>% rasterToPoints %>% as.data.frame
colnames(ras_df) <- c('x','y','val')

bm <- ggplot()+
  geom_tile(data=ras_df,aes(x=x,y=y,fill=val))+
  geom_polygon(data=shp_albers,aes(x=long,y=lat,group=group),colour='grey',
           fill=NA,linetype='solid',size=0.1)

enter image description here

但这是xy正交的笛卡尔图形(不是albers形状图)。 所以问题是: 通常,如何绘制带有投影的合适形状图(不是简单的正交图形)?同时如何将xy标签更改为lon / lat度并绘制弧形lon / lat线(不使用正交线)?预计第一个数字,但绘制速度太慢。 栅格和shp文件为here

0 个答案:

没有答案