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

如何使用geom_sf让地图共享边界显示两种颜色?

解决区域地图共享边界颜色单一的辨识度问题

问题背景

你通过group_by(region_wb) %>% summarise()合并非洲国家为区域后,绘制的区域边界因共享部分仅显示单一颜色,导致中部红色区域与相邻的蓝紫色区域边界难以区分。以下提供两种实用的解决方法:


方法一:双层边界叠加(快速凸显区域轮廓)

通过先绘制一层粗的深色底层边界,再叠加彩色细边界,利用底层边界衬托出每个区域的完整轮廓,解决共享边界颜色重叠的问题。

修改后的代码:

library(rnaturalearthdata)
library(dplyr)
library(ggplot2)
library(sf)

data1<-ne_countries(scale=50)
crs_target<-st_crs ("+proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84")
data2<-data1%>%
   sf::st_transform(crs=crs_target)
africa<-subset(data2,continent=='Africa')
westA<-africa%>%
  group_by(region_wb)%>%
  summarise()

ggplot()+
  # geom_tile(data=test_cou,aes(x=x,y=y,fill=Biome))+  # 保留你的热力图层
  # 第一步:绘制粗的黑色底层边界,作为所有区域的统一轮廓
  geom_sf(data=westA, fill=NA, colour="black", linewidth=2)+
  # 第二步:叠加上彩色细边界,对应各区域颜色
  geom_sf(data=westA, fill=NA, aes(colour=region_wb), linewidth=1)+
  scale_color_manual(values=c('chocolate3','red3','purple3','maroon3','blue3'))+
  guides(color=guide_legend(position='bottom',direction='horizontal'))

效果说明:底层粗黑色边界会将每个区域的轮廓完整呈现,上层彩色边界覆盖后,即使共享边界也会被黑色边框隔开,红色区域的边界与相邻区域的对比会非常清晰。


方法二:保留单个国家边界,按区域统一上色

放弃合并区域的操作,直接给每个国家按所属区域设置边界颜色,这样共享边界会同时显示相邻两个区域的颜色,自然区分不同区域。

修改后的代码:

library(rnaturalearthdata)
library(dplyr)
library(ggplot2)
library(sf)

data1<-ne_countries(scale=50)
crs_target<-st_crs ("+proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84")
data2<-data1%>%
   sf::st_transform(crs=crs_target)
africa<-subset(data2,continent=='Africa')

ggplot()+
  # geom_tile(data=test_cou,aes(x=x,y=y,fill=Biome))+  # 保留你的热力图层
  # 直接使用单个非洲国家数据,按区域设置边界颜色
  geom_sf(data=africa, fill=NA, aes(colour=region_wb), linewidth=1.1)+
  scale_color_manual(values=c('chocolate3','red3','purple3','maroon3','blue3'))+
  guides(color=guide_legend(position='bottom',direction='horizontal'))

可选优化:如果需要区域填充效果,可以添加fill=region_wb并调整透明度,让区域区分更直观:

geom_sf(data=africa, aes(fill=region_wb, colour=region_wb), linewidth=1, alpha=0.3)+
scale_fill_manual(values=c('chocolate3','red3','purple3','maroon3','blue3'))+

效果说明:每个国家的边界都会显示所属区域的颜色,相邻区域的共享边界会同时呈现两种颜色,中部红色区域与蓝紫色区域的边界会形成明显对比,辨识度大幅提升。


内容的提问来源于stack exchange,提问作者Jordan T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:32:41