使用rnaturalearth绘图时FR和NO国家未显示的问题排查
问题分析与解决
你遇到的法国(FR)和挪威(NO)未在地图上显示的核心原因是数据匹配失败,导致这两个国家的Value字段为NA,而scale_fill_gradient默认会将NA值的填充设为透明,看起来像是国家未显示。以下是具体排查和解决步骤:
一、先确认匹配状态
运行以下代码检查FR和NO的匹配结果:
# 查看匹配后法国、挪威的Value值 filter(world_data, iso_a2 %in% c("FR", "NO")) %>% select(name, iso_a2, Value)
如果输出结果中Value列是NA,说明确实存在匹配问题。
二、解决匹配失败问题
1. 清除CSV中Country列的隐藏空格
如果你的CSV文件中Country列的代码前后存在空格(比如"FR "或" NO"),会导致匹配失效。执行以下代码去除空格:
# 清除Country列前后的空格 data$Country <- trimws(data$Country) # 重新连接地图数据与CSV数据 world_data <- left_join(world, data, by = c("iso_a2" = "Country"))
2. 确保Country列为字符类型
旧版本的R中,read.csv默认会将字符串列转为因子类型,而rnaturalearth返回的iso_a2是字符类型,两种类型匹配时可能出错。读取CSV时明确设置字符串不转因子:
data <- read.csv("country-test.csv", header = TRUE, stringsAsFactors = FALSE)
3. 改用iso_a3代码匹配(更稳定)
相比iso_a2,iso_a3国家代码的匹配稳定性更高。修改你的country-test.csv为以下格式:
Country, Value DEU,1 USA,2 FRA,3 NOR,4
然后修改数据连接代码:
world_data <- left_join(world, data, by = c("iso_a3" = "Country"))
三、优化地图显示效果
为了让未匹配到数据的国家显示默认颜色(避免看起来像是“消失”),在scale_fill_gradient中添加na.value参数:
ggplot(world_data) + geom_sf(aes(fill = Value)) + scale_fill_gradient(low = "lightblue", high = "darkblue", na.value = "gray90") + theme_minimal()
内容的提问来源于stack exchange,提问作者Andreas Tille
相关产品推荐
相关产品推荐

