Fra*_*ank 5 r ggplot2 gganimate
我正在尝试显示随着时间的推移构建的直方图。它将从 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)
Run Code Online (Sandbox Code Playgroud)
这很失败。
我可以将一些东西与 混合在一起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()
Run Code Online (Sandbox Code Playgroud)
这会产生所需的结果,但很笨拙。有没有更便携的方式?
这是我正在寻找的 gif:
我无法弄清楚使用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)
Run Code Online (Sandbox Code Playgroud)