使用ggplot2绘制美国地图时边界匹配异常问题求助
ggplot2美国州地图边界错位修复方案
问题
用ggplot2绘制美国州地图,按是否提出某法案给州着色,着色逻辑正常,但州边界严重错位、图形破碎。
问题根源
merge()函数会打乱地理数据的原始坐标顺序,而geom_polygon必须依赖连续的坐标点顺序才能正确绘制多边形边界,顺序乱了就会画出破碎的图形。- 默认
merge()是内连接,会自动过滤掉没有法案数据的州,导致这些州无法在地图上显示,也没法设置“未提出法案”的着色。
修复方法
- 用
left_join()替换merge(),保留地理数据的原始顺序,保证多边形绘制正确。 - 为没有法案数据的州填充
introduced默认值(比如用0代表“未提出”),确保所有州都能显示并正确着色。
修正后代码
library(tidyverse) library(maps) # 处理美国州地理数据 all_states <- map_data("state") %>% rename(state = region) %>% mutate(state = str_to_title(state)) # 读取并处理法案数据 int <- read_csv("int.csv", col_types = cols(introduced = col_integer())) %>% # 把州缩写转换成全称 mutate(state = state.name[match(state, state.abb)]) %>% select(state, introduced) # 左连接数据,保留所有州并填充缺失值 stateData <- left_join(all_states, int, by = "state") %>% mutate(introduced = ifelse(is.na(introduced), 0, introduced)) # 绘制地图 plot1 <- ggplot() + geom_polygon( data = stateData, aes(x = long, y = lat, group = group, fill = as.factor(introduced)), color = "grey50" ) + coord_map() print(plot1)
内容的提问来源于stack exchange,提问作者MarkWeiss
相关产品推荐
相关产品推荐

