You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:24:01