#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
— отредактирует ответ, чтобы продемонстрировать через мгновение…