在R中使用ggplot2和tigris实现分级统计图地图放大的异常问题
问题原因
你给coord_sf设置的xlim/ylim是经纬度(十进制度),但你的数据已经通过st_transform(26918)转换为UTM Zone 18N坐标系(单位是米),两种坐标系的数值范围完全不匹配,导致地图显示异常。
解决方案
有两种可行的修复方式:
方法1:使用UTM坐标系的米单位设置范围
先查看当前数据的坐标边界,获取米单位的范围值:
st_bbox(ny_data)
根据输出的边界值,调整xlim和ylim为对应米范围,示例代码:
ggplot(data=ny_data, aes(fill = estimate)) + geom_sf(color = NA) + coord_sf(xlim = c(585000, 595000), ylim = c(4495000, 4505000)) + # 替换为st_bbox输出的实际区间 scale_fill_viridis_c(option = "magma") + theme_minimal() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
方法2:在coord_sf中指定经纬度坐标系
直接在coord_sf里添加crs = 4326参数,告诉ggplot你输入的是WGS84经纬度范围,它会自动转换为当前数据的UTM坐标系:
ggplot(data=ny_data, aes(fill = estimate)) + geom_sf(color = NA) + coord_sf(xlim = c(-74.05, -73.9), ylim = c(40.6, 40.85), crs = 4326) + scale_fill_viridis_c(option = "magma") + theme_minimal() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
内容的提问来源于stack exchange,提问作者t010010
相关产品推荐
相关产品推荐

