Как использовать GGanimate для анимации между списком фреймов данных? - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь ежедневно составлять график данных о расходах и доходности для набора объявлений. Для заданного диапазона дат я перебираю диапазон и создаю рамку даты. Каждая из этих таблиц добавляется в список в виде отдельных фреймов данных.

Вот пример кода:

l <- list() df1 <- tribble( ~Ad, ~Spend, ~Profitability, "Cat", 10000, 0.21, "Movie", 20000, -0.05, "Dog", 8000, 0.07) l[1] <- list(df1) df2 <- tribble( ~Ad, ~Spend, ~Profitability, "Cat", 14000, 0.25, "Movie", 21000, -0.08, "Dog", 8000, 0.09, "TV", 4000, .31) l[2] <- list(df2) df3 <- tribble( ~Ad, ~Spend, ~Profitability, "Cat", 13000, 0.18, "Movie", 23000, -0.11, "TV", 7000, .25) l[3] <- list(df3)

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

Это пример одного из графиков рассеяния:

ggplot(as.data.frame(l[1]), aes(x = Spend, y = Profitability, color = Ad)) + geom_point(size = 3) + xlim(0, 30000) + scale_y_continuous(labels = scales::percent, limits = c(-0.25, 0.5)) + geom_text(aes(label = Ad), size = 2, vjust = -2)

Мой вопрос состоит в том, как я мог анимировать этот gif, чтобы точки непрерывно перемещались изо дня в день (то есть точка разброса 'Cat' переместится из (10000,0.21) в (14,000, 0,25) в (13 000, 0,18)?

Еще одно осложнение заключается в том, что набор объявлений не обязательно будет одинаковым изо дня в день (таблица в таблицу), поскольку некоторые объявления вообще не тратят в определенные дни. объявление не существует в определенном месте, я соответствующая точка разброса, чтобы перейти к (0,0).

Спасибо!

1 Ответ

0 голосов
/ 26 октября 2019
library(purrr); library(gganimate)
l %>%
  map_df(magrittr::extract, .id = "table",
         c("Ad", "Spend", "Profitability")) %>%
  complete(table, Ad, fill = list(Spend = 0, Profitability = 0)) %>%
  ggplot(aes(Spend, Profitability, color = Ad)) +
  geom_point() +
  transition_states(table)

enter image description here

...