我如何使用过滤函数将 geom_bar 动画化为 "add data"?

How can I animate geom_bar to "add data" using a filter function?

好吧,我们都知道这不是我的真实数据或问题,但是,为了一个可重现的例子...

假设我正在努力为我女儿的婚礼准备足够的鲜花。

我的朋友安娜在她家的鸢尾花数据集中有每个物种 25 种植物。我想给伴娘留下深刻印象,我想给她看我在我朋友杰的家里发现了每种植物的 25 株额外植物。在图中,我还将展示植物的状况,因为也许我们不想在我女儿的婚礼上使用蹩脚的花。

我对如何使用 gganimate 实现这个简单的动画感到困惑!

这是创建“起点”(最左边的图)和“终点”(右边的图)的代码。如何在两者之间制作动画?

library(tidyverse)
library(gganimate)

House <- rep(c(rep(c("Anna's", "Jay's"), each = 25)))
Houses <- c(House, House, House)

Plant_Condition <- rnorm(150, mean = 20, sd = 10)
Plant_Condition <- ifelse(Plant_Condition > 25, "good", "poor")

iris_mod <- iris %>% 
  mutate(House = Houses,
         Condition = Plant_Condition)

p <- ggplot(iris_mod %>% filter(House == "Anna's"), aes(Species, fill = Condition)) +
  geom_bar() +
  coord_cartesian(ylim = c(0, 50))

p2 <- ggplot(iris_mod, aes(Species, fill = Condition)) +
  geom_bar()  +
  coord_cartesian(ylim = c(0, 50))

我发现使用 gganimate 执行此类操作的最简单方法是想象您正在创建一个带有多面体的情节。如果您可以将想要的两个帧作为分面实现,则可以在它们之间进行转换。所以我们可以这样做:

iris_mod <- rbind(iris_mod %>% filter(House == "Anna's"), 
                  within(iris_mod, House <- "Everything"))

ggplot(iris_mod, aes(Species, fill = Condition)) +
  geom_bar() +
  coord_cartesian(ylim = c(0, 50)) +
  transition_states(House,
                    transition_length = 2,
                    state_length = 2)