Построение карты мира ggplot со странами, окрашенными в соответствии с диапазонами номеров

#r #ggplot2 #maps

#r #ggplot2 #Карты

Вопрос:

Я ggplot впервые пытаюсь построить карту, и у меня возникают проблемы с достижением того, что я имею в виду.

Прежде всего, у меня есть фрейм данных, в котором каждый код страны связан с числом. Например:

 id        count
US        2030
DE        1001
UA        730
SY        229
  

Я хотел бы получить ggplot карту, на которой страны окрашены в соответствии с диапазоном номеров (например: более 2000 темно-красных, 1000-2000 красных, 1000-600 оранжевых, 600-200 желтых, менее 100 белых). Сам цвет не важен, я просто хотел бы, чтобы он становился бледнее, чем меньше количество.

Это то, что я пробовал:

  world_map <- map_data(map = "world")
 world_map$region <- iso.alpha(world_map$region)
    
 ggplot(df, aes(map_id = id))  
   geom_map(aes(fill = frequency), map = world_map)  
   expand_limits(x = world_map$long, y = world_map$lat)  
   scale_colour_manual(name = "counts", values = cols,
                    breaks = c(2000,1000,600,200), 
                    labels=c("more than 2000","2000-1000","1000-600","600-200"))    
   theme_void()  
   coord_fixed()
  

Когда я пытаюсь выполнить этот код, я получаю следующее сообщение об ошибке

Не знаю, как автоматически выбрать масштаб для объекта типа function . По умолчанию используется значение continuous. Ошибка: Эстетика должна быть допустимыми столбцами данных. Проблемная эстетика (ы): заполнение = частота. Вы неправильно ввели имя столбца данных или забыли добавить after_stat() ?

Теперь я понимаю, что есть проблема в том, как я устанавливаю свои параметры, но я не могу найти никакого решения для этого в Интернете (или, может быть, я слишком новичок, чтобы правильно понять это).

Комментарии:

1. Можете ли вы предоставить нам свои данные?

Ответ №1:

Приношу свои извинения за любую путаницу. Я думаю, это то, что вы ищете.

Во-первых, было бы полезно cut разделить ваш count столбец на группы с желаемыми метками. Это создаст фактор count_group .

Если вы хотите изменить порядок меток в легенде графика, вы можете изменить порядок этого фактора с fct_rev помощью from forcats .

Затем используйте это для вашего fill geom_map ввода, и вы можете использовать scale_fill_manual для определения своих цветов. В этом случае вам может понадобиться Reds палитра.

Чтобы добавить границы вокруг стран, используйте geom_polygon с NA для заливки.

 library(maps)
library(RColorBrewer)
library(forcats)

df <- data.frame(
  id = c("US", "DE", "UA", "SY"),
  count = c(2030, 1001, 730, 229)
)

df$count_group <- cut(df$count, 
                      breaks = c(-Inf, 200, 600, 1000, 2000, Inf), 
                      labels = c("Less than 200", "600-200", "1000-600", "2000-1000", "More than 2000"))

world_map <- map_data(map = "world")
world_map$region <- iso.alpha(world_map$region)

ggplot(df)  
  geom_map(aes(map_id = id, fill = fct_rev(count_group)), map = world_map)  
  geom_polygon(data = world_map, aes(x = long, y = lat, group = group), colour = 'black', fill = NA)  
  expand_limits(x = world_map$long, y = world_map$lat)  
  scale_fill_manual(name = "Counts", values = rev(brewer.pal(5, name = "Reds")))  
  theme_void()  
  coord_fixed()
  

Построение

карта с черными границами и заполнена по количеству

Комментарии:

1. Спасибо, этот код делает свое дело! Только один дополнительный вопрос: какой фрагмент кода я могу использовать в ggplot для отображения границ стран черным цветом?

2. Отлично — рад слышать. Вам нужно использовать geom_polygon — отредактирует ответ, чтобы продемонстрировать через мгновение…