R语言ggplot2绘制美国州级联邦税收影响地图问题求助
美国各州联邦税收影响地图绘制问题修复与优化
1. 报错根源与代码修复
你遇到的'from' doit être un nombre fini错误,核心原因是数据筛选逻辑完全错误:
- 你用
state == "alaska" & state == "hawaii" & state == "grand total",一个州不可能同时等于三个值,应该用|(或),但grand total是汇总行,根本不属于州地图数据,应该直接排除。 - 之前的
filter(fedtax_data3,is.na(long))是找出没有匹配到地图坐标的行,这些行(比如grand total)会导致绘图时没有有效坐标范围,触发报错。
修正后的完整代码:
# 加载所需包 library(maps) library(mapproj) library(tidyverse) # 获取美国州地图数据并重命名匹配列 states <- map_data("state") %>% rename(state = region) # 统一州名字母大小写,确保和地图数据匹配 fedtax_data2 <- fedtax_data2 %>% mutate(state = tolower(state)) # 合并数据并过滤无效行 fedtax_data3 <- fedtax_data2 %>% select(state, total_industry_impact) %>% left_join(states, by = "state") %>% # 排除没有地图坐标的无效行(比如grand total) drop_na(long, lat) %>% # 手动排除汇总行 filter(!state == "grand total") # 绘制地图 ggplot(fedtax_data3, aes(long, lat)) + geom_polygon(aes(group = group, fill = total_industry_impact), color = "white") + # 添加白色边框区分各州 theme_void() + # 一键隐藏所有轴元素,替代手动逐个设置 ggtitle("Total Federal Tax Impact by State") + coord_map("albers", lat0 = 39, lat1 = 45) + # 使用阿尔伯斯投影,适配美国地图 labs(fill = "Total Industry Impact") # 给填充色添加标题
2. 调整刻度实现各州对比
如果各州的total_industry_impact数值差距较大,可以通过以下方式优化刻度,提升对比效果:
- 手动设置刻度区间:自定义断点并格式化数值:
scale_fill_continuous( breaks = seq(0, max(fedtax_data3$total_industry_impact, na.rm = T), by = 1000000), labels = scales::dollar_format() # 转换为美元格式,可读性更强 ) - 对数刻度:适合数值跨度极大的场景,压缩差距:
scale_fill_continuous(trans = "log10", labels = scales::dollar_format()) - 分箱刻度:将数值分成离散区间,用阶梯色阶展示:
scale_fill_binned( n.breaks = 5, labels = scales::dollar_format(), guide = guide_colorsteps(title = "Total Impact") )
将上述任意一种刻度调整代码添加到ggplot的图层末尾即可。
内容的提问来源于stack exchange,提问作者sikimimi
相关产品推荐
相关产品推荐

