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