Как использовать gganimate для двух наборов данных, которые зависят друг от друга - PullRequest
1 голос
/ 12 марта 2020

Как следует из названия, я хотел бы анимировать более двух наборов данных.

Первый, довольно простой:

dots <- tribble(
  ~x,  ~y, ~time,
  1, 1, 1,
  1, 2, 2,
  2, 2, 3,
  2, 1, 4, 
  1, 1, 5
)

anim <- ggplot(data = dots, mapping = aes(x, y)) +
  geom_point() +
  transition_time(time) +
  ggtitle("Frame: {frame_time}")

anim

Это производит следующую захватывающую анимацию:

first animation

Как вы можете видеть, точка движется в соответствии с временным измерением в таблице dots, мощность которой равна 5. Я бы хотел, чтобы поле, которое появляется, когда time == 2 и когда time == 4.

Если я изменю код, я могу заставить поля появляться статически:

boxes <- tribble(
  ~x, ~y, ~id, ~timeb,
  0.9, 1.9, 1, 2,
  1.1, 1.9, 1, 2,
  1.1, 2.1, 1, 2,
  0.9, 2.1, 1, 2,
  0.9, 1.9, 1, 2,
  1.9, 0.9, 2, 4,
  2.1, 0.9, 2, 4,
  2.1, 1.1, 2, 4,
  1.9, 1.1, 2, 4,
  1.9, 0.9, 2, 4
)


anim <- ggplot(data = dots, mapping = aes(x, y)) +
  geom_point() +
  transition_time(time) +
  ggtitle("Frame: {frame_time}") +
  geom_polygon(data = boxes %>% filter(id == 1), mapping = aes(x, y), fill = NA, colour = "black") +
  geom_polygon(data = boxes %>% filter(id == 2), mapping = aes(x, y), fill = NA, colour = "black")

anim

, который производит эту анимацию:

second animation

Итак, по сути, я хочу, чтобы окно появлялось, когда точка приближается.

Я бы не хотел, чтобы окна просто fla sh, я бы хотел, чтобы они появлялись и исчезали, что-то вроде:

third animation

, которые я произвел следующим образом:

anim_2 <- ggplot(data = boxes, mapping = aes(x, y, group = id)) +
  geom_polygon(fill = NA, colour = "black") +
  transition_states(id) +
  enter_fade() +
  exit_fade()

anim_2

Я надеюсь, что это имеет смысл (и что у кого-то есть хорошая идея для этого:)

1 Ответ

1 голос
/ 13 марта 2020

См. Этот пример здесь: https://github.com/thomasp85/gganimate/wiki/Tracking-of-hurricanes-and-typhoons

Обратите внимание, что каждый из двух геомов (линия и точка) относится к кадру данных, который включает столбец time. В принципе, это могли быть два разных кадра данных, если они оба совместно используют один и тот же именованный столбец для измерения времени.

Это означает, что вы можете transition_time анимировать несколько геометрий "независимо". Вам просто нужно поэкспериментировать со временем появления и исчезновения ваших ящиков, чтобы они появились как раз вовремя для точек.

...