ggplot2绘制栅格均值图时如何叠加shp多边形并自定义配色导出?
你需要先将读入的矢量多边形转换为ggplot2支持的格式,再在合适的图层位置叠加即可,步骤如下:
步骤1:转换矢量格式
优先推荐使用sf包处理矢量,和ggplot2兼容性更好:
# 安装并加载sf包(如果未安装) # install.packages("sf") library(sf) # 将readOGR读取的Spatial对象转为sf对象 pg_sf <- st_as_sf(pg) # 确认矢量和栅格的坐标系一致,否则叠加位置会偏移 st_crs(pg_sf) == crs(se1) # 如果不一致先转换坐标系 # pg_sf <- st_transform(pg_sf, crs = crs(se1))
步骤2:在ggplot代码中添加多边形图层
图层叠加顺序为「底层栅格->均值栅格->多边形->标注」,所以把多边形图层加在第二个geom_raster之后即可,修改后的核心代码如下:
p_cv <- ggplot() + coord_fixed() + # 底层栅格 geom_raster(data = xy_FONDO, aes(lon, lat, fill = r)) + scale_fill_gradient(low = "gray56", high = "gray56", na.value = NA, guide = FALSE) + new_scale("fill") + # 均值栅格 geom_raster(data = cv.df, aes(x, y, fill = layer))+ scale_fill_gradientn(colours = conti_col_pal, breaks = seq(-1, 7, 2), limits = c(0, 10))+ # ----------------------新增多边形图层在这里---------------------- # fill设为NA表示空心,仅显示边界,color和linewidth可自行调整样式 geom_sf(data = pg_sf, fill = NA, color = "black", linewidth = 0.2, inherit.aes = FALSE) + # ----------------------新增结束---------------------- annotate(geom = "text", x = lonmin+2, y = latmax-2, vjust = 1, hjust = 0, label = "", color = "black", angle = 0, size=4)+ # 后续的坐标轴、主题配置保持不变即可 scale_x_continuous(limits = c(lonmin, lonmax), expand = c(0, 0)) + scale_y_continuous(limits = c(latmin, latmax), expand = c(0, 0))+ theme_bw(base_family="") # 其余主题配置保持原有代码即可
如果你的ggplot2版本较低不支持geom_sf,可以用传统的fortify转换矢量格式后用geom_polygon叠加:
# 先转换为数据框 pg_df <- fortify(pg) # 替换上面的geom_sf部分为以下代码 geom_polygon(data = pg_df, aes(x = long, y = lat, group = group), fill = NA, color = "black", size = 0.2)
内容的提问来源于stack exchange,提问作者user_3264
相关产品推荐
相关产品推荐

