使用tmap绘制纽约人口普查区时出现错误求助
解决tmap绘制纽约人口普查区时的行数不匹配错误
问题根源
错误提示replacement has 91698 rows, data has 91987和警告The shape NY contains empty units,本质是get_acs返回的地理数据中存在空几何图形(无实际边界的普查区),导致tmap计算图形面积时无法匹配数据行数。
解决方案
方案1:过滤空几何图形
利用sf包的st_is_empty函数直接筛选掉空几何行,这是最直接的修复方式:
library(tidycensus) library(tmap) library(sf) census_api_key("你的API密钥") NY <- get_acs( geography = "tract", table = "B19001", state = "NY", year = 2020, geometry = TRUE, cache_table = TRUE ) # 过滤空几何图形 NY_clean <- NY[!st_is_empty(NY), ] # 绘制地图 tm_shape(shp = NY_clean) + tm_polygons()
方案2:缩小数据范围(可选)
如果仅需纽约州内特定区域(如纽约市),可通过county参数限定范围,从源头减少空图形:
NY <- get_acs( geography = "tract", table = "B19001", state = "NY", county = c("New York", "Kings", "Queens", "Bronx", "Richmond"), # 纽约市五区 year = 2020, geometry = TRUE, cache_table = TRUE )
补充说明
空几何图形多对应水域、非居住类特殊普查区,过滤后不影响常规人口数据的可视化。若需保留这类区域,可尝试用st_make_valid修复无效几何,但过滤仍是最高效的解决方法。
内容的提问来源于stack exchange,提问作者SiH
相关产品推荐
相关产品推荐

