基于 ggplot 和 map_data 用 R 给不同的国家上色

Color different countries with R based on ggplot and map_data

所以我正在尝试创建动物不同亚种的分布图。我想根据那里可以找到的亚种,为每个国家/地区涂上不同的颜色。 但是当我尝试给一个新的国家上色时,代码中的第一个会被新的国家抹掉。例如,这里中国的红色消失了,取而代之的是我只能看到韩国的蓝色。 我认为问题是我只是替换了我以前的命令,我已经尝试将它们合并为一行,但是我得到了不同的错误。

我该如何解决这个问题? 非常感谢!

library(maps)
library(mapdata)
library(ggplot2)
library(dplyr)

world <- map_data('world')

world <- mutate(world, fill = ifelse(region %in% c("China"), "red", "white"))
world <- mutate(world, fill = ifelse(region %in% c("North Korea", "South Korea"), "blue", 
"white"))


ggplot(world, aes(long, lat, fill = fill, group = group)) +
  xlim(-10,150)+ ylim (-7,100)+
  theme_void() +
  geom_map(map = world, aes(map_id = region), fill="white", color="grey") +
  geom_polygon(colour="gray") +
  scale_fill_identity()

正如您已经猜到的那样,您正在用第二个 ifelse 覆盖颜色分配。要解决这个问题,我建议使用 dplyr::case_when:

library(ggplot2)
library(dplyr)

world <- map_data('world')

world <- mutate(world, fill = case_when(
  region %in% c("China") ~ "red", 
  region %in% c("North Korea", "South Korea") ~ "blue", 
  TRUE ~ "white"))

ggplot(world, aes(long, lat, fill = fill, group = group)) +
  xlim(-10,150)+ ylim (-7,100)+
  theme_void() +
  geom_map(map = world, aes(map_id = region), fill="white", color="grey") +
  geom_polygon(colour="gray") +
  scale_fill_identity()