如何使用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
相关产品推荐
相关产品推荐

