ggplot2 geom_sf图例颜色显示错误问题求助
解决ggplot地图图例颜色错误问题
问题原因
原代码使用fill美学映射图例,但geom_sf默认绘制的点无填充区域,且未手动指定图例与颜色的绑定关系,导致图例颜色被自动分配且显示错误。同时替代数据存在笔误,重复赋值了Acities。
修正方案
- 改用
color美学映射图例(对应点的显示颜色,更符合需求) - 用
scale_color_manual手动绑定图例标签与目标颜色 - 修正替代数据的笔误,确保数据格式正确
修改后的完整代码
library(ggplot2) library(dplyr) library(sf) library(maps) # 美国背景地图数据 usa_states <- map_data("state") %>% rename(lon=long, State=region, County=subregion) # 替代数据(修正格式与笔误) Acities <- matrix(c(34.0549, -118.243, 38.9072, -77.0369, 29.9511, -90.0715, 40.8137, -96.7026, 40.7128, -74.006), nrow=5, ncol=2, byrow=TRUE) Acities <- as.data.frame(Acities) %>% rename(lat=V1, lon=V2) Acities_sf <- st_as_sf(Acities, coords = c("lon", "lat"), crs = 4326) Bcities <- matrix(c(34.0549, -118.243, 40.7128, -74.006), nrow=2, ncol=2, byrow=TRUE) Bcities <- as.data.frame(Bcities) %>% rename(lat=V1, lon=V2) Bcities_sf <- st_as_sf(Bcities, coords = c("lon", "lat"), crs=4326) # 绘制地图 AandBmap <- ggplot() + geom_polygon(data=usa_states, aes(x=lon, y=lat, group=group), fill="#DAD9D5", color="white") + coord_quickmap() + geom_sf(data=Acities_sf, size = 1.5, aes(color="A Location")) + geom_sf(data=Bcities_sf, size = 1.5, aes(color="A and B Location")) + scale_color_manual(values = c( "A Location" = "#174337", "A and B Location" = "#EAAA1B" )) + guides(color=guide_legend(title=NULL)) + labs(x=NULL, y=NULL) + theme_void() AandBmap
效果说明
- 保持B类城市图层在A类之后,橙色点仍会覆盖深色点
- 图例中"A Location"显示#174337深色,"A and B Location"显示#EAAA1B橙色,与地图点颜色一致
内容的提问来源于stack exchange,提问作者Alyssa
相关产品推荐
相关产品推荐

