在R中使用ggplot2绘制栅格地图的基础方法及相关问题
解决方案:栅格与SF对象投影匹配及ggplot叠加绘制
(a) 提取CRS并统一投影
提取CRS
- 提取SF对象的CRS,使用
st_crs()函数:
sf_crs <- st_crs(distVDS_betas) print(sf_crs)
- 提取栅格数据的CRS(raster包),使用
crs()函数:
raster_crs <- crs(GAEZstack) print(raster_crs)
统一投影
若两者CRS不一致,选择一种统一方式:
- 转换栅格到SF对象的CRS(推荐,适配ggplot的SF绘制逻辑):
GAEZstack_proj <- projectRaster(GAEZstack, crs = sf_crs$wkt)
- 转换SF对象到栅格的CRS:
distVDS_betas_proj <- st_transform(distVDS_betas, crs = raster_crs) states_proj <- st_transform(states, crs = raster_crs)
(b) ggplot2叠加栅格与州级矢量图层
geom_raster需要数据框格式的栅格数据,先转换格式再叠加:
# 将投影后的栅格转换为带坐标的数据框 raster_df <- as.data.frame(GAEZstack_proj[[1]], xy = TRUE) # 重命名栅格列(便于后续映射,原列名是对应tif的文件名) colnames(raster_df)[3] <- "raster_value" # 绘制叠加图 ggplot() + # 绘制栅格图层 geom_raster(data = raster_df, aes(x = x, y = y, fill = raster_value)) + # 自定义栅格颜色刻度(可根据需求替换调色板) scale_fill_viridis_c(name = "栅格值") + # 叠加州级边界 geom_sf(data = states, lwd = 0.5, color = "#000000", fill = NA) + # 设置标题和主题 ggtitle("栅格数据与州边界叠加图") + theme_minimal()
内容的提问来源于stack exchange,提问作者Leah Bevis
相关产品推荐
相关产品推荐

