【问题标题】:Positioning of violin plots when using gganimate使用 gganimate 时小提琴图的定位
【发布时间】: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 的使用,还有其他更适合的功能吗?

标签: r ggplot2 gganimate


【解决方案1】:

只需使用transition_states() 或transition_time()。

代码

ggplot(df, aes(x = 0, y = value)) +
    geom_violin() +
    transition_states(year, transition_length = 3, state_length = 1) +
    labs(title = "{closest_state}")

数据

set.seed(1701)
df <- data.frame(year = c(rep(2000:2010, each = 50)),
                 value = rnorm(550))

【讨论】:

    猜你喜欢
    • 2017-09-03
    • 2016-07-02
    • 1970-01-01
    • 2017-08-10
    • 2018-05-19
    • 2018-12-10
    • 2017-08-30
    • 2016-06-13
    • 2020-08-23
    相关资源
    最近更新 更多