сгруппированная гистограмма с течением времени - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь анимировать столбчатую диаграмму со временем. В частности, я бы хотел, чтобы каждый стек сначала создавался в определенном году, а затем переходил к следующему. Кроме того, я хотел бы убедиться, что прошлые бары видны. Следующий код отображает каждый столбец сразу и переходит к следующему году, делая предыдущие годы невидимыми. Есть ли способ решить эту проблему?

library(tidyr)  
library(ggplot2)
library(gganimate)
library(dplyr)

df <- data.frame(stringsAsFactors=FALSE,
                 Year = c("2010", "2011", "2012"),
                 LabelOne = c(1000, 1500, 2000),
                 LabelTwo = c(50, 100, 150),
                 LabelThree = c(20, 30, 40)
)

df_long <- gather(df, lbs, Value, LabelOne:LabelThree, -Year)
head(df_long)

pp <- ggplot(df_long, aes(Year, Value)) +
  geom_bar(stat = "identity", aes(fill = lbs)) +
  transition_states(Year, 
          transition_length = 4, state_length = 2) +
    ease_aes('cubic-in-out')

animate(pp, nframes = 300, fps = 50, width = 400, height = 550)

1 Ответ

0 голосов
/ 05 января 2019

Если вы сделаете ваши данные похожими на это:

df2 <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), Year = c(2010L, 2010L, 2010L, 
2010L, 2010L, 2010L, 2011L, 2011L, 2011L, 2010L, 2010L, 2010L, 
2011L, 2011L, 2011L, 2012L, 2012L, 2012L), lbs = structure(c(1L, 
3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 
2L), .Label = c("LabelOne", "LabelThree", "LabelTwo"), class = "factor"), 
    Value = c(1000L, 50L, 20L, 1000L, 50L, 20L, 1500L, 100L, 
    30L, 1000L, 50L, 20L, 1500L, 100L, 30L, 2000L, 150L, 40L)), class = "data.frame", row.names = c(NA, 
-18L))

Вы можете анимировать более ID вместо Year, и он строится последовательно. Группа 1 - это 2010 год, группа 2 - это 2010 и 2011 годы, а группа 3 - это 2010, 2011 и 2012 годы

pp <- ggplot(df2, aes(Year, Value)) +
  geom_bar(stat = "identity", aes(fill = lbs)) +
  transition_states(ID, 
          transition_length = 4, state_length = 2) +
    ease_aes('cubic-in-out')
...