gganimate barchart: плавный переход при замене бара - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу создать анимированный барплот с пакетом gganimate.Столбик должен содержать 4 столбца, но только три столбца должны отображаться одновременно.Когда выпадает полоса и появляется новая полоса, анимация должна быть плавной (как это происходит, когда две позиции переключаются в пределах графика).

Рассмотрим следующий пример:

# Set seed
set.seed(642)

# Create example data
df <- data.frame(ordering = c(rep(1:3, 2), 3:1, rep(1:3, 2)),
                 year = factor(sort(rep(2001:2005, 3))),
                 value = round(runif(15, 0, 100)),
                 group = c(letters[sample(1:4, 3)],
                           letters[sample(1:4, 3)],
                           letters[sample(1:4, 3)],
                           letters[sample(1:4, 3)],
                           letters[sample(1:4, 3)]))

# Load packages
library("gganimate")
library("ggplot2")

# Create animated ggplot
ggp <- ggplot(df, aes(x = ordering, y = value)) +
  geom_bar(stat = "identity", aes(fill = group)) +
  transition_states(year, transition_length = 2, state_length = 0)
ggp

enter image description here

При замене полосы цвет полосы просто меняется без какой-либо плавной анимации (т. Е. Новая полоса должна лететь со стороны, а замененная полоса должна лететьout).

Вопрос: Как можно сгладить замену стержней?

1 Ответ

0 голосов
/ 12 февраля 2019

Я чувствую небольшой сбой в 2003 году (кажется, b и c поменялись местами при переходе), но, надеюсь, это поможет вам приблизиться.Я думаю enter_drift и exit_drift - это то, что вы ищете.

library("gganimate")
library("ggplot2")
ggp <- ggplot(df, aes(x = ordering, y = value, group = group)) +
  geom_bar(stat = "identity", aes(fill = group)) +
  transition_states(year, transition_length = 2, state_length = 0) + 
  ease_aes('quadratic-in-out') +   # Optional, I used to see settled states clearer
  enter_drift(x_mod = -1) + exit_drift(x_mod = 1) +
  labs(title = "Year {closest_state}")
animate(ggp, width = 600, height = 300, fps = 20)

enter image description here

...