Как мне объединить функцию geom_smooth (method = "lm) с gganimate ()'s transition_layers, чтобы по мере смещения / роста отдельных баров появлялась линейная линия geom_smooth, например: Примержелаемый вид линии geom_smooth Единственное отличие состоит в том, что в моем случае вместо точек бары будут дрейфовать вверх при появлении линии.
Ток баров работает хорошо, появляясь при смещении вверх,возможно с помощью функции transition_layers из gganimate.
Однако я не могу понять, как добавить строку geom_smooth, поэтому она появляется по мере того, как столбцы растут вверх. Прямо сейчас линия появляется только в конце,как показано ниже.
См. ниже текущий вид анимации.
Вот простой пример моей проблемы:
#Df for reprex
library(ggplot2)
library(tidyverse)
year <- as.numeric(c(1996:2002,
1996:2002,
1996:2002))
c <- c(39, 40, 67, 80, 30, 140, 90, 23, 100, 123,
140, 1, 2, 1, 13, 3, 3, 30, 1, 3, 3)
df <- data.frame(year, c) %>%
select(year, c) %>%
arrange(year)
#Static plot
(static_plot <- ggplot(data = df) +
geom_bar(data = df %>% filter(year == 1996), stat="identity", position ="stack",
aes(x = year, y = c)) +
geom_bar(data = df %>% filter(year == 1997), stat="identity", position ="stack",
aes(x = year, y = c)) +
geom_bar(data = df %>% filter(year == 1998), stat="identity", position ="stack",
aes(x = year, y = c)) +
geom_bar(data = df %>% filter(year == 1999), stat="identity", position ="stack",
aes(x = year, y = c)) +
geom_bar(data = df %>% filter(year == 2000), stat="identity", position ="stack",
aes(x = year, y = c)) +
geom_bar(data = df %>% filter(year == 2001), stat="identity", position ="stack",
aes(x = year, y = c)) +
geom_bar(data = df %>% filter(year == 2002), stat="identity", position ="stack",
aes(x = year, y = c)) +
labs(y = "year",
x = "c",
title = "Reprex") +
geom_smooth(df, mapping = aes(x = year, y = c), method = "lm",
colour = "black", se = F)
)
#Animation
library(gganimate)
anim <- static_plot +
transition_layers(layer_length = 1, transition_length = 1) +
enter_drift(x_mod = 0, y_mod = -max(df$c))
animate(anim, fps = 10, duration = 10,
width = 600, height = 500, renderer = gifski_renderer())
![Current animation](https://i.stack.imgur.com/1iPHR.gif)