我想使用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
中转换每个像元坐标很慢,特别是在高栅格分辨率时。因此,我认为先更改栅格投影,然后再绘制。因此,第二部分的代码如下:
#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)
但这是xy正交的笛卡尔图形(不是albers形状图)。 所以问题是: 通常,如何绘制带有投影的合适形状图(不是简单的正交图形)?同时如何将xy标签更改为lon / lat度并绘制弧形lon / lat线(不使用正交线)?预计第一个数字,但绘制速度太慢。 栅格和shp文件为here