Построение сложенной гистограммы с помощью gganimate - PullRequest
3 голосов
/ 26 апреля 2019

Я пытаюсь показать здание гистограммы с течением времени.Он будет начинаться, скажем, с данных 1952 года, затем каждый год будет обновляться гистограмма, увеличиваясь.

Путь кажется изумительным, и я думаю, что с помощью transition_reveal можно медленно раскрывать больше данных с течением времени.Это не похоже на работу.

Допустим, я начну с этого:

library(gapminder)
library(tidyverse)
library(gganimate)

ggplot(gapminder, 
       aes(lifeExp, fill = fct_rev(factor(year)), group = fct_rev(factor(year)))) +
  geom_histogram(position = "stack", bins = 20) +
  transition_reveal(year)  

, что плохо.

Я могу сортировать вещи вместе с transition_layer, например:

ggplot(gapminder, aes(lifeExp, fill = fct_rev(factor(year)))) +
  geom_histogram(position = "stack", bins = 20, 
                 data = filter(gapminder, year<= 1952)) +
  geom_histogram(position = "stack", bins = 20, 
                 data = filter(gapminder, year<= 1957)) +
  geom_histogram(position = "stack", bins = 20, 
                 data = filter(gapminder, year<= 1962)) +
  geom_histogram(position = "stack", bins = 20, 
                 data = filter(gapminder, year<= 1967)) +
  geom_histogram(position = "stack", bins = 20, 
                 data = filter(gapminder, year<= 1972)) +
  geom_histogram(position = "stack", bins = 20, 
                 data = filter(gapminder, year<= 1977)) +
  transition_layers()  

, который дает желаемый результат, но громоздкий.Есть ли более портативный способ?

Вот изображение того, что я ищу:

Growing stacked histogram

1 Ответ

3 голосов
/ 26 апреля 2019

Я не мог понять это, используя geom_histogram, но я мог сделать составленную гистограмму из geom_rect.

bin_yrs = 2
a <- gapminder %>%
  count(year, life_bin = floor(lifeExp / bin_yrs) * bin_yrs) %>%
  complete(year, life_bin, fill = list(n = 0)) %>%
  arrange(year, life_bin) %>%
  group_by(life_bin) %>%
  mutate(dummy = lag(cumsum(n), default = 0)) %>%
  ungroup() %>%

  ggplot(aes(xmin = life_bin, 
             xmax = life_bin + bin_yrs,
             ymin = dummy, 
             ymax = dummy + n,
             fill = as.factor(year))) +
  geom_rect() +
  transition_manual(year) +
  shadow_trail()
animate(a, nframes = 12, fps = 4, width = 600, height = 300)

enter image description here

...