Большая часть работы заключается в изменении данных перед их отправкой в ggplot и gganimate.Чтобы помочь вам в этой работе, я создал несколько примеров данных на основе вашей картинки (в будущем, пожалуйста, предоставьте образцы данных самостоятельно).
library(tidyverse)
library(gganimate)
df <- tribble(
~LinkIDs, ~Year2001Traffic, ~Year2002Traffic, ~Year2003Traffic,
"A", 1, 10, 15,
"B", 3, 1, 10,
"C", 10, 5, 1)
df
# A tibble: 3 x 4
LinkIDs Year2001Traffic Year2002Traffic Year2003Traffic
<chr> <dbl> <dbl> <dbl>
1 A 1 10 15
2 B 3 1 10
3 C 10 5 1
gganimate и ggplot лучше всего работают с данными в длинном формате.Поэтому первым шагом является изменение данных с широких на длинные, прежде чем отправлять их в ggplot.
df <- df %>% gather(Year, Traffic, -LinkIDs)
df
# A tibble: 9 x 3
LinkIDs Year Traffic
<chr> <chr> <dbl>
1 A Year2001Traffic 1
2 B Year2001Traffic 3
3 C Year2001Traffic 10
4 A Year2002Traffic 10
5 B Year2002Traffic 1
6 C Year2002Traffic 5
7 A Year2003Traffic 15
8 B Year2003Traffic 10
9 C Year2003Traffic 1
gganimate требует, чтобы столбец Year был числом, прежде чем он сможет использовать его для анимации.Поэтому нам нужно извлечь числа, содержащиеся в значениях.
df <- df %>% mutate(
Year = parse_number(Year))
df
# A tibble: 9 x 3
LinkIDs Year Traffic
<chr> <dbl> <dbl>
1 A 2001 1
2 B 2001 3
3 C 2001 10
4 A 2002 10
5 B 2002 1
6 C 2002 5
7 A 2003 15
8 B 2003 10
9 C 2003 1
Теперь все остальное просто.Просто отобразите данные и используйте переменную года для аргумента анимации.
p1 <- ggplot(df, aes(x = LinkIDs, y = Traffic))+
geom_point()+
labs(title = 'Year: {frame_time}', x = 'Link ID', y = 'Traffic Volume')+
transition_time(Year)
animate(p1)
_________________________ РЕДАКТИРОВАТЬ ПОСЛЕ ОБНОВЛЕННЫХ КОММЕНТАРИЙ _______
Запрос вкомментарии:
«Я просто хочу, чтобы он проходил временную шкалу (с 2001 по 2003) только один раз, а затем останавливался на 2003.»
На случай, если вы захотитеостановившись на 2003 году, вам нужно будет отфильтровать данные перед отправкой их в ggplot - это делается с помощью команды фильтра.
Начиная с 23/3 2019 года, насколько я знаю, нет никакого способапройти анимацию только один раз.Вы можете изменить аргумент end_pause для вставки паузы после каждой итерации анимации (я изменил geom_point () на geom_col (), учитывая ваше описание).
p2 <- df %>%
#keep only observations from the year 2003 and earlier
filter(Year <= 2003) %>%
#Send the data to plot
ggplot(aes(x = LinkIDs, y = Traffic, fill = LinkIDs))+
geom_col()+
labs(title = 'Year: {frame_time}', x = 'Link ID', y = 'Traffic Volume')+
transition_time(Year)
animate(p2, fps = 20, duration = 25, end_pause = 95)