使用 gganimate 在 R 中按顺序动画更改密度图
Sequentially Animate Changing Density Plots in R with gganimate
我正在尝试创建一个动画来展示每次将新样本添加到数据集以及更新均值和标准差时数据正态分布的密度如何变化。我尝试使用 gganimate 包并且几乎得到了我正在寻找的东西,但我无法在动画中获得正确的顺序。我相当确定这是一个显而易见的解决方案,非常感谢您提供的任何帮助。
可以使用以下代码重新创建示例数据框:
library(tidyverse)
library(gganimate)
sampled_data <- data.frame(Group = rep("A", 14),
week = c(0,2:5,7:14,20),
mean = c(30, 24.76111, 28.02916, 29.1741, 26.75879, 29.80132, 30.33864, 32.02787, 30.39993, 31.53138, 33.36167, 33.64898, 33.25587, 32.76954),
st_dev = c(10, 8.518451, 7.524797, 7.048826, 6.242289, 5.490741, 5.247176, 4.757057, 4.34478, 4.034823, 3.680196, 3.569206, 3.455505, 3.317643))
n = 20000
plot_df <- sampled_data %>%
uncount(n) %>%
mutate(value = rnorm(n(), mean, st_dev)) %>%
select(Group, week, value)
这将为您提供一个数据框,可以将其输入 ggplot 以使用 geom_density
覆盖密度。
plot_df %>%
ggplot(aes(x=value, fill = as.factor(week))) +
geom_density(alpha = 1)
符合我意图的 gganimate 选项是 transition_reveal
。
plot_df %>%
ggplot(aes(x=value, fill = as.factor(week))) +
geom_density(alpha = 1) +
transition_reveal(week)
gif 动画的问题在于周数不是 "revealed" 按顺序排列的。当我尝试在绘图美学 ggplot(aes(x=value, fill = seq_along(as.factor(week))))
中使用 seq_along()
对因子进行排序时,它从绘图中删除了颜色填充,并从本质上将动画变成了线框,使可视化对于指导目的毫无用处。
我的最终目标是让图上的周 "reveled" 按顺序排列,最近一周在数据集中所有前几周的顶部,并保留颜色填充。在此先感谢您对此问题的任何帮助。
我认为这是 gganimate
中的错误,因为在应用过渡之前绘图顺序似乎是正确的(即上周在最上面)。
但是,另一种方法确实有效:
plot_df %>%
ggplot(aes(x=value, fill = as.factor(week))) +
geom_density(alpha = 1) +
transition_time(week) +
shadow_mark()
我正在尝试创建一个动画来展示每次将新样本添加到数据集以及更新均值和标准差时数据正态分布的密度如何变化。我尝试使用 gganimate 包并且几乎得到了我正在寻找的东西,但我无法在动画中获得正确的顺序。我相当确定这是一个显而易见的解决方案,非常感谢您提供的任何帮助。
可以使用以下代码重新创建示例数据框:
library(tidyverse)
library(gganimate)
sampled_data <- data.frame(Group = rep("A", 14),
week = c(0,2:5,7:14,20),
mean = c(30, 24.76111, 28.02916, 29.1741, 26.75879, 29.80132, 30.33864, 32.02787, 30.39993, 31.53138, 33.36167, 33.64898, 33.25587, 32.76954),
st_dev = c(10, 8.518451, 7.524797, 7.048826, 6.242289, 5.490741, 5.247176, 4.757057, 4.34478, 4.034823, 3.680196, 3.569206, 3.455505, 3.317643))
n = 20000
plot_df <- sampled_data %>%
uncount(n) %>%
mutate(value = rnorm(n(), mean, st_dev)) %>%
select(Group, week, value)
这将为您提供一个数据框,可以将其输入 ggplot 以使用 geom_density
覆盖密度。
plot_df %>%
ggplot(aes(x=value, fill = as.factor(week))) +
geom_density(alpha = 1)
符合我意图的 gganimate 选项是 transition_reveal
。
plot_df %>%
ggplot(aes(x=value, fill = as.factor(week))) +
geom_density(alpha = 1) +
transition_reveal(week)
gif 动画的问题在于周数不是 "revealed" 按顺序排列的。当我尝试在绘图美学 ggplot(aes(x=value, fill = seq_along(as.factor(week))))
中使用 seq_along()
对因子进行排序时,它从绘图中删除了颜色填充,并从本质上将动画变成了线框,使可视化对于指导目的毫无用处。
我的最终目标是让图上的周 "reveled" 按顺序排列,最近一周在数据集中所有前几周的顶部,并保留颜色填充。在此先感谢您对此问题的任何帮助。
我认为这是 gganimate
中的错误,因为在应用过渡之前绘图顺序似乎是正确的(即上周在最上面)。
但是,另一种方法确实有效:
plot_df %>%
ggplot(aes(x=value, fill = as.factor(week))) +
geom_density(alpha = 1) +
transition_time(week) +
shadow_mark()