Мне не удалось найти ранее опубликованный вопрос, который достаточно ответил на этот вопрос.В предыдущих сообщениях принятые ответы использовали shadow_mark, чтобы сохранить постоянство ранее отображенных слоев.
Как сохранить предыдущие слои данных при выполнении анимации в R gganimate?
Сохранить точки в gganimate
ЭтоХороший обходной путь при отображении выходных данных в диаграмме рассеяния, но это не кумулятивное измерение, и оно не выполняется, например, при попытке сделать гистограмму с накоплением.
Рассмотрим следующие данные.Я хочу построить накопительную гистограмму с накоплением, используя переходное состояние в моей df.
df <- data.frame(t = c(2000, 2000, 2001, 2001, 2002, 2002),
f = c("y", "n", "y", "n", "y", "n"),
x = c("a", "a", "b", "c", "a", "c"),
y = c(2,3,5,1,4,8))
> df
t f x y
1 2000 y a 2
2 2000 n a 3
3 2001 y b 5
4 2001 n c 1
5 2002 y a 4
6 2002 n c 8
Я хочу отобразить данные из2000, и в следующем слое я хочу добавить данные за 2001 год как совокупные с предыдущим слоем.И снова, для следующего слоя я хочу добавить данные за 2002 год как кумулятивные с 2000 и 2001 годами.
Это показывает, почему shadow_mark не является решением для кумулятивных данных:
ggplot(df, aes(x=x, y=y, fill=f)) +
geom_col() + labs(x=NULL, y=NULL, fill=NULL, title="{closest_state}") +
transition_states(t, transition_length = 2, state_length = 1) +
shadow_mark() + enter_fade() + exit_shrink() + ease_aes('sine-in-out') + theme_bw()
Добавление вызова shadow_mark не приведет к желаемым результатам кумулятивного графика.«a» должно иметь суммарное значение 9.
Можно было бы разделить данные на 3 различных значения df для c(2000)
, c(2000,2001)
и c(2000,2001,2002)
, а затем rbind после создания новогоКолонка штатов, но это похоже на очень хакерский подход.
Есть ли более чистый способ отображения совокупных данных с помощью инструментов, встроенных в gganimate?