Используйте transition_reveal в gganimate для кумулятивного построения линий - PullRequest
2 голосов
/ 17 октября 2019

Есть ли способ использовать transition_reveal() в gganimate для рисования линий одна за другой - или обходной путь, использующий другие функции перехода ..

library(tidyverse)
library(gganimate)
set.seed(1)
d <- tibble(x = 1:100, a = cumsum(rnorm(100)), b = cumsum(rnorm(100))) %>%
  pivot_longer(cols = a:b, names_to = "grp", values_to = "y")
d
# # A tibble: 200 x 3
#        x grp        y
#    <int> <chr>  <dbl>
#  1     1 a     -0.626
#  2     1 b     -0.620
#  3     2 a     -0.443
#  4     2 b     -0.578
#  5     3 a     -1.28 
#  6     3 b     -1.49 
#  7     4 a      0.317
#  8     4 b     -1.33 
#  9     5 a      0.646
# 10     5 b     -1.99 
# # ... with 190 more rows

Я бы хотел, чтобы только линия была показана ввремя - так что построение второй строки начинается после завершения первой (один кадр 101), а не то, что обе линии строятся одновременно ...

ggplot(data = d, mapping = aes(x = x, y = y, colour = grp)) +
  geom_line() +
  transition_reveal(along = x) 

enter image description here

1 Ответ

4 голосов
/ 17 октября 2019

Мы могли бы создать вспомогательный столбец, который ставит баллы для b после всех баллов для a:

d %>%
  arrange(grp, x) %>%
  mutate(x_reveal = row_number()) %>%
  ggplot(aes(x = x, y = y, colour = grp)) +
    geom_line() +
    transition_reveal(along = x_reveal) 

enter image description here

...