У меня есть данные на уровне округа, записывающие год, когда инвазивные вредные насекомые были впервые обнаружены в этом округе в период между 2002 и 2018 годами. Я создал карту, используя ggplot2, и пакет карт, который заполняет полигоны округа цветом в соответствии с годом, в котором был нанесен вредный организм.был обнаружен.
** Есть ли способ использовать пакет gganimate для анимации этой карты с заполнением первого кадра только полигонами с датой обнаружения 2002 г., полигонов заполнения второго кадра?с датой обнаружения 2003 или более ранней (так 2002 и 2003), третьим кадром для дат обнаружения 2004 или более ранней (2002, 2003, 2004) и т. д.?** Уточнение: мне бы хотелось, чтобы все полигоны округов всегда были видны и изначально были заполнены белым, а каждый кадр анимации добавляет графы заливок в зависимости от года обнаружения.
Я пробовалиспользуя transition_reveal(data$detect_year)
со статическим графиком, но получаю ошибку, что «вдоль данных должны быть либо целые числа, либо числа, POSIXct, Date, difftime, orhms».
Вот некоторый код для воспроизводимого примера:
library(dplyr)
library(purrr)
library(maps)
library(ggplot2)
library(gganimate)
# Reproducible example
set.seed(42)
map_df <- map_data("county") %>%
filter(region == "minnesota")
map_df$detection_year <- NA
# Add random detection year to each county
years <- 2002:2006
map_list <- split(map_df, f = map_df$subregion)
map_list <- map(map_list, function(.x) {
.x$detection_years <- mutate(.x, detection_years = sample(years, 1))
})
# collapse list back to data frame
map_df <- bind_rows(map_list)
map_df$detection_years <- as.factor(map_df$detection_years)
# Make plot
static_plot <- ggplot(map_df,
aes(x = long,
y = lat,
group = group)) +
geom_polygon(data = map_df, color = "black", aes(fill = detection_years)) +
scale_fill_manual(values = terrain.colors(n = length(unique(map_df$detection_years))),
name = "Year EAB First Detected") +
theme_void() +
coord_fixed(1.3)
animate_plot <- static_plot +
transition_reveal(detection_years)
Если это возможно сделать с помощью gganimate, я бы хотел, но я также открыт для других решений, если у кого-то есть идеи.