You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:50:08