【发布时间】:2018-10-16 18:36:55
【问题描述】:
我正在使用 ggplot2 3.0.0 和 gganimate 0.1.1。 这是一个 MWE:
library(ggplot2)
library(gganimate)
df <- data.frame(year = rep(2000:2010, each = 50),
value = rnorm(550))
ggplot(df, aes(x = 0, y = value, frame = factor(year))) +
geom_violin() -> p
gganimate(p)
这会创建一个动画,其中每一帧都像这样
而我希望每一帧都像这样占据整个情节
我该如何调整我的代码以获得这个结果?
编辑
This是我想制作的,这次用实际数据就有了。我通过手动将动画的每一帧拼接在一起来实现这一点,但这种方式对于更复杂的情节是不可持续的,所以我希望使用 gganimate 来代替。
【问题讨论】:
-
您正在创建一个小提琴情节动画作为
year的函数。正如您从生成的动画 GIF 中看到的那样,沿 x 轴显示的图随着年份的增加而增加。我不确定您如何期望单个小提琴图跨越整个绘图区域;左边的第一个图对应于第一年,右边的最后一个图对应于最后一年。必须平均分配所有年份的地块空间。 -
我不确定你到底想表达什么观点,所以也许我应该详细说明一下。我希望每一年都在自己的框架中展示。因此,第一帧将是使用 2000 年数据的单个小提琴图,然后是下一帧,相同但针对 2001 年的数据。由于 year 变量是在 frame 美学中编码的,我不希望它也被编码在 x 美学中,因为那是多余的。所以我希望每一帧的情节都居中,这样你就可以逐年比较它们。
-
“由于 year 变量在框架美学中编码,我不希望它也以 x 美学编码,因为那是多余的。” 但那不是你正在做的!看看你的 GIF:随着年份的增加,每个小提琴图的位置沿 x 轴变化。我对您要达到的目标感到非常困惑。这似乎更像是理解
gganimate的工作原理而不是“小提琴图的位置”? -
我知道这是我所做的,但这不是我打算做的。我不确定为什么我会得到这个结果,因此我为什么要问这个问题。我已经编辑了一个我想要的例子。也许我误解了 gganimate 的工作原理。我的印象是,对于帧美学的每个值,使用过滤到该帧值的数据集重新生成绘图,然后将它们组合在一起以制作动画。这就是为什么我设置 x = 0 以便希望每一帧都居中。如果这不是 gganimate 的使用,还有其他更适合的功能吗?