如何在Shapefile摩洛哥省份地图中高亮指定区域?
如何在摩洛哥省份地图中高亮指定省份(以Tan Tan为例)
要实现指定省份的高亮效果,核心思路是分层绘制地图:先绘制所有省份的基础图层,再单独叠加目标省份的图层,通过颜色、边框粗细的差异来突出显示。以下是两种实用的实现方法:
方法一:直接分层绘制(简洁高效)
直接通过filter()筛选出目标省份,在基础地图之上叠加绘制:
library(ggplot2) library(dplyr) library(sf) # 绘制基础地图(所有省份) ggplot() + # 基础图层:浅灰色填充,白色细边框 geom_sf(data = morocco_shp, fill = "#e0e0e0", color = "white", size = 0.5) + # 高亮图层:筛选Tan Tan省,橙色填充+黑色粗边框 geom_sf(data = filter(morocco_shp, NAME == "Tan Tan"), fill = "#ff7f0e", color = "black", size = 1.2) + theme_bw() + labs(title = "摩洛哥省份地图 - 高亮Tan Tan省")
说明:
- 图层顺序很重要:基础图层要放在前面,高亮图层叠在上方
- 如果需要高亮多个省份,只需修改筛选条件为
NAME %in% c("Tan Tan", "Guelmim") - 可根据需求调整填充色、边框色和粗细参数
方法二:添加标记列(灵活可扩展)
如果需要频繁调整高亮省份,建议先给数据添加一个高亮标记列,再通过映射设置样式:
# 新增高亮标记列 morocco_shp <- morocco_shp %>% mutate(highlight_flag = case_when( NAME == "Tan Tan" ~ "highlight", TRUE ~ "normal" )) # 基于标记列绘制地图 ggplot(morocco_shp) + geom_sf(aes(fill = highlight_flag, color = highlight_flag), size = 0.5) + # 自定义颜色映射 scale_fill_manual(values = c("normal" = "#e0e0e0", "highlight" = "#ff7f0e")) + scale_color_manual(values = c("normal" = "white", "highlight" = "black")) + theme_bw() + labs(title = "摩洛哥省份地图 - 高亮Tan Tan省") + # 隐藏不需要的图例 guides(fill = "none", color = "none")
说明:
- 后续修改高亮省份时,只需调整
case_when()中的条件即可 - 如果需要保留图例,去掉最后一行的
guides()代码即可
内容的提问来源于stack exchange,提问作者Saïd Maanan
相关产品推荐
相关产品推荐

