От ОП:
Редактировать: автор пакета упоминает, что можно [сделать это], но я не
знать, на какой аргумент «раскрыть время» он ссылается.
В Твиттере Томас Лин Педерсен говорил о том, как линия transition_reveal
управляет кадрами анимации. Таким образом, мы можем передать ему одну переменную, которая будет «сердцебиением» анимации, оставив исходные переменные для графиков.
Мой первый подход заключался в создании новой переменной reveal_time
, которая была бы сердцебиением. Я бы увеличил его больше в точках паузы, чтобы анимация затрачивала больше времени на эти точки данных. Здесь я сделал это, добавив 10 в дни паузы и только 1 в другие дни.
library(dplyr)
airq_slowdown <- airq %>%
group_by(Month) %>%
mutate(show_time = case_when(Day %in% c(10,20,31) ~ 10,
TRUE ~ 1),
reveal_time = cumsum(show_time)) %>%
ungroup()
Затем я добавил это в анимацию, изменив фрейм исходных данных и строку transition_reveal
.
library(gganimate)
a <- ggplot(airq_slowdown, aes(Day, Temp, group = Month)) +
geom_line() +
geom_segment(aes(xend = 31, yend = Temp), linetype = 2, colour = 'grey') +
geom_point(size = 2) +
geom_text(aes(x = 31.1, label = Month), hjust = 0) +
transition_reveal(Month, reveal_time) + ### Changed from OP
coord_cartesian(clip = 'off') +
labs(title = 'Temperature in New York', y = 'Temperature (°F)') +
theme_minimal() +
theme(plot.margin = margin(5.5, 40, 5.5, 5.5))
animate(a, nframe = 50)
Но когда я это сделал, я понял, что это не пауза, а просто замедление анимации. Эффект «времени пули» - круто, но не совсем то, что я искал.
Таким образом, мой второй подход состоял в том, чтобы фактически скопировать приостановленные строки анимации. При этом не было бы твининга и были бы настоящие паузы:
airq_pause <- airq %>%
mutate(show_time = case_when(Day %in% c(10,20,31) ~ 10,
TRUE ~ 1)) %>%
# uncount is a tidyr function which copies each line 'n' times
uncount(show_time) %>%
group_by(Month) %>%
mutate(reveal_time = row_number()) %>%
ungroup()