R语言使用plot_usmap包绘制美国地图时结果异常问题
plot_usmap 绘制分面美国地图异常修复方案
问题原因
代码存在两处不符合plot_usmap使用规则的错误,直接导致输出结果异常:
- 数据列名不匹配:存储州两位缩写的列被命名为
fips,但plot_usmap中fips列默认要求传入5位官方行政编码,州缩写对应的固定识别列名为abbr,列名错误会导致数据和地图边界无法正确匹配。 - 分面参数格式错误:
facet_grid()需要传入公式格式的分面规则,直接传入字符串"year"无法识别数据集中的year字段,导致两个年份的数值全部叠加在同一张地图上渲染,填充色映射完全混乱。
补充:如果需要使用FIPS编码匹配而非州缩写,可以调用
usmap::fips()函数将州缩写转换为对应5位编码,存入fips列即可正常识别。
修正后可运行代码
# 加载所需依赖 library(usmap) library(ggplot2) # 修正数据集列名:将州缩写列重命名为abbr dt <- data.frame( abbr = c("CA", "AL", "NY", "IA", "TX", "CA", "AL", "NY", "IA", "TX"), value = c(25, 45, 45, 60, 75, 15, 65, 75, 20, 65), year = c(2000, 2000, 2000, 2000, 2000, 2010, 2010, 2010, 2010, 2010) ) # 执行绘图 plot_usmap( data = dt, values = "value", exclude = c("AK", "HI") # 排除阿拉斯加、夏威夷,仅展示本土48州 ) + scale_fill_continuous( low = "white", high = "red", name = "Ele gen (EJ)", label = scales::comma ) + facet_grid(~year) # 分面必须传入公式格式,此处按年份横向分面
原异常结果参考

运行修正代码后,将自动按2000、2010两个年份生成两张独立的美国本土州地图,每个州的填充色会准确对应当年的value数值,不会出现匹配错位、颜色错乱的问题。
内容的提问来源于stack exchange,提问作者Arwen
相关产品推荐
相关产品推荐

