【问题标题】:How to use GGanimate to animate between a list of data frames?如何使用 GGanimate 在数据框列表之间制作动画?
【发布时间】:2020-02-22 03:18:32
【问题描述】:

我正在尝试绘制一组广告每天随时间推移的支出和盈利能力数据。对于给定的日期范围,我遍历该范围并创建一个日期框架。这些表中的每一个都作为单独的数据框附加到列表中。

这里是一些示例代码:

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)

到目前为止,我一直将每个表格绘制为散点图(利润作为 y 轴,支出作为 x 轴)并将它们保存为单独的 png 以将它们制作成 gif,但它看起来非常不稳定。

这是其中一个散点图的示例:

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 设置动画,以便点每天连续移动(即“猫”散点将从 (10000,0.21) 移动到 (14,000, 0.25) 到 (13,000, 0.18) )?

另一个复杂情况是,一组广告不一定每天都相同(表到表),因为某些广告在某些日子根本不会花费。如果某个广告不存在,我将相应的散点移动到 (0,0)。

谢谢!

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。数据图片没有帮助,因为我们无法复制/粘贴它们。
  • 感谢@MrFlick 的建议!刚刚用一些示例代码编辑了我的帖子。
  • 这只是数据,不是我们可以运行以查看您在说什么图表的任何代码
  • 对不起!这个编辑有帮助吗?

标签: r ggplot2 gganimate


【解决方案1】:
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)

【讨论】:

  • 非常感谢!正是我想要的:)
猜你喜欢
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
相关资源
最近更新 更多