是否有一个转换功能来保留旧条并添加新条?“Transition_reveal”仅移动单数条

是否有一个转换功能来保留旧条并添加新条?“Transition_reveal”仅移动单数条,r,gganimate,R,Gganimate,试着把它做成这样,我就可以在R中的条形图上一个接一个地添加条形图。我知道有一个名为transition_layers的函数,但我一直无法让它在我的生活中发挥作用。在下面的可复制示例中,我的酒吧多年来一直在移动,但我想要的是一个新的酒吧多年来一个接一个地增加,并让每个老酒吧保持不变 图书馆: library(magrittr) library(broom) library(purrr) library(gganimate) library(gifski) library(ggthemes) lib

试着把它做成这样,我就可以在R中的条形图上一个接一个地添加条形图。我知道有一个名为transition_layers的函数,但我一直无法让它在我的生活中发挥作用。在下面的可复制示例中,我的酒吧多年来一直在移动,但我想要的是一个新的酒吧多年来一个接一个地增加,并让每个老酒吧保持不变

图书馆:

library(magrittr)
library(broom)
library(purrr)
library(gganimate)
library(gifski)
library(ggthemes)
library(png)
library(jpeg)
library(ggimage)
library(grid)

Cost <- c(1, 2, 4)
Year <- c(2016, 2017, 2018)


example <- data.frame(Year, Cost)
example_bar <-ggplot(data = example, mapping = aes(Year))+
  geom_bar(aes(weight = Cost))+
  theme_stata()+
  transition_reveal(Year)
库(magrittr)
图书馆(扫帚)
图书馆(purrr)
库(gganimate)
图书馆(吉夫斯基)
图书馆(主题)
图书馆(png)
图书馆(jpeg)
图书馆(ggimage)
图书馆(网格)

成本您需要通过在
geom_col
中设置
group=Year
来明确告诉
gganimate
x轴中的每列都在不同的组中(我将
geom_bar
更改为
geom_col
,因为我认为这更直观,但基本上是一样的事情)。否则,gganimate将把它们视为同一组,列将在x轴上滑动。这在其他类型的动画中也发生过。明确设置
参数通常是一个好主意

ggplot(data = example)+
  geom_col(aes(x=Year, y = Cost, group=Year)) +
  transition_reveal(Year)
anim_save(filename = 'gif1.gif', anim1, nframes=30, fps=10, end_pause=5)

但是,我无法使用
transition\u reveal
设置转换时间和配置新列的显示方式。动画看起来很奇怪,每一列在另一列之前都停留了很长时间。我可以使用
动画
/
动画保存

因此,另一种解决方案是通过保留“过去”行来更改数据框,用当前年份创建一个新列,并使用
transition\u states

library(dplyr)

df.2 <- plyr::ldply(.data= example$Year, 
                    .fun = {function(x){
                      example %>% dplyr::filter(Year <= x) %>%
                        dplyr::mutate(frame=x)}})

# add row with data for dummy empty frame
df.2 <- rbind(data.frame(Year=2016, Cost=0, frame=2015), df.2)

anim2 <- ggplot(data = df.2) +
  geom_col(aes(x=Year, y = Cost, group=Year)) + 
  transition_states(frame, transition_length = 2, state_length = 1, wrap=FALSE) +
  enter_fade() + enter_grow()

anim_save(filename = 'gif2.gif', anim2)
库(dplyr)
df.2%dplyr::过滤器(年)
dplyr::mutate(frame=x)})
#添加包含虚拟空帧数据的行

df.2加载
broom
purr
png
jpeg
ggimage
,和
grid
,有什么特别的原因吗?当你使用的都是
ggplot2
ggthemes
,和
gganimate
?没有特别的,它们只是用于我的实际问题。抱歉搞砸了真棒,有没有可能让第一个也动起来?我在创建答案时也考虑过。也许有一个参数可以添加到
enter\u grow
enter\u fade
以获得此效果,但我找不到。一种解决方案是在2016年将一个虚拟行添加到data.frame
df.2
,其中的“成本=0”。这样你就得到了这种效果。但是我还将
wrap=FALSE
添加到
transition\u states
中,否则动画会收缩最后的第一列。我将编辑我的代码以包含此内容。