如何使用ggplot2的map_data函数填充美国州地图并显示州界线?
解决ggplot2绘制美国州级地图的两个问题
你的代码问题出在没有按州分组绘制多边形,导致所有坐标点被连成了一个不规则图形,自然无法完整填充区域。下面是针对两个需求的修正方案:
1. 完整填充美国州区域
在geom_polygon的aes中添加group = group参数,map_data("state")返回的数据集里,group列专门用来区分不同的州(包括阿拉斯加、夏威夷这类飞地),这样每个州的多边形会被单独绘制:
library(ggplot2) # 获取州地图数据 StateMap <- ggplot2::map_data("state") # 绘制完整填充的地图 ggplot(StateMap, aes(x = long, y = lat, group = group)) + geom_polygon(fill = "#619CFF") # 可自定义填充颜色
2. 显示州界线
有两种常用方式添加州界线:
- 方式一:直接在
geom_polygon中设置color参数,用对比色(比如白色)作为界线颜色:
ggplot(StateMap, aes(x = long, y = lat, group = group)) + geom_polygon(fill = "#619CFF", color = "white", linewidth = 0.3)
- 方式二:用
geom_path单独绘制界线,这种方式能更灵活控制界线样式:
ggplot(StateMap, aes(x = long, y = lat, group = group)) + geom_polygon(fill = "#619CFF") + geom_path(color = "white", linewidth = 0.3)
如果需要调整阿拉斯加、夏威夷的位置(默认它们会在主大陆之外的角落),可以对数据集的long和lat做坐标变换,缩小并移动到合适位置,不过这属于额外优化,基础需求按上面的代码就能解决。
内容的提问来源于stack exchange,提问作者Sharif Amlani
相关产品推荐
相关产品推荐

