choroplethrzip设置reference_map=FALSE时地图无法正常显示的问题
问题
我用choroplethrzip包绘制密歇根东南部邮政编码的分级统计图,同时通过geom_polygon添加县界叠加层,geom_text添加县标签。当前代码如下:
zip_choropleth(df, zip_zoom = plot_zips, reference_map=TRUE) + geom_polygon(data = countyref, aes(x = long, y = lat, group = group), alpha = 0, color = "black", linewidth = 0.2) + geom_text(data = mi_county_midpoints, aes(x = long, y = lat, label = county), size = 2, color = "black", fontface = "bold")
当reference_map=TRUE时代码运行正常,但改为FALSE或移除该参数时,出现以下错误:
Error in `geom_text()`: Problem while computing aesthetics. Error occurred in the 3rd layer. Caused by error: object 'group' not found
移除geom_text函数后错误消失,但地图显示异常;仅保留zip_choropleth部分则正常。请问如何在无背景参考地图的情况下,绘制带县界和标签的该地图?
补充:数据集格式如下:
| region | value |
|---|---|
| 48001 | 1 |
| 48002 | 0 |
| 48003 | 10 |
| 48005 | 7 |
| 48006 | 3 |
| 48009 | 22 |
| 48014 | 5 |
| 48015 | 12 |
| 48017 | 32 |
设置reference_map=TRUE时地图显示符合预期。
解决方案
问题根源
当reference_map=FALSE时,zip_choropleth返回的ggplot对象会默认传递全局美学映射(包含group字段),但geom_text调用的mi_county_midpoints数据集没有group列,因此触发报错。同时无参考地图时,坐标系未自动设置,导致地图显示变形。
修正方案
- 给
geom_polygon和geom_text添加inherit.aes = FALSE参数,切断对全局美学映射的继承; - 手动添加墨卡托坐标系,匹配
reference_map=TRUE时的投影规则。
修正后代码
library(choroplethrZip) library(ggplot2) zip_choropleth(df, zip_zoom = plot_zips, reference_map = FALSE) + geom_polygon(data = countyref, aes(x = long, y = lat, group = group), alpha = 0, color = "black", linewidth = 0.2, inherit.aes = FALSE) + geom_text(data = mi_county_midpoints, aes(x = long, y = lat, label = county), size = 2, color = "black", fontface = "bold", inherit.aes = FALSE) + coord_map("mercator")
关键说明
inherit.aes = FALSE:避免后续图层继承zip_choropleth的默认映射,彻底解决group字段找不到的问题;coord_map("mercator"):强制使用墨卡托投影,保证无参考地图时的显示效果和有参考地图时一致,解决地图变形问题。
内容的提问来源于stack exchange,提问作者Jack Tait
相关产品推荐
相关产品推荐

