我正在用ggplot2和gganimate制作动画图,其中geom_line
和geom_point
代表相同的数字数据。这是一个散点图,其中我希望点数据以动画过渡的方式出现,并显示连接动画点的数据的基础线。
当前,transition_reveal(Año)
正确地为'geom_line'设置了动画,但是从那里开始,我不知道如何为geom_line
设置动画。
我尝试添加transition_states
(之前我曾使用它成功地为geom_point
元素设置动画),但是我不知道如何将两种不同类型的过渡添加到两种不同类型同一张图上的几何图形。每次尝试时,都会出错。诸如enter_grow
之类的元素似乎什么也没做。
以下是数据:
Año = c(1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008)
Nacimientos= c(4571,4782,4834,4701,4787,4467,4571,4583,4776,4761,5017,5287)
Defunciones= c(889,946,946,916,991,1026,1040,1127,1092,1070,1156,1199)
TasaNatalidad= c(20.8, 21.0, 20.4, 19.1, 19.0, 17.2, 17.2, 16.8, 17.1, 16.6, 17.1, 17.6)
TasaMortalidad= c(4.0, 4.1, 4.0, 3.7, 3.9, 3.9, 3.9, 4.1, 3.9, 3.7, 3.9, 4.0)
TasaFecundidad= c(2.61, 2.63, 2.58, 2.43, 2.42, 2.21, 2.22, 2.18, 2.23, 2.17, 2.23, 2.29)
Tarapaca <- data.frame(Año,Nacimientos,Defunciones,TasaFecundidad,TasaMortalidad,TasaNatalidad)
这是用移动的线条渲染动画图的代码,但是圆圈只是“出现”而没有动画:
library(ggplot2)
library(gganimate)
n0 <- ggplot(Tarapaca, aes(x = Año, y = Nacimientos)) +
geom_line(color ="#BA3C11", alpha=0.6) +
transition_reveal(Año) +
geom_point(aes(group = seq_along(Año),
size = TasaNatalidad,
alpha=TasaFecundidad),
color ="#DD4814") +
enter_grow() +
enter_fade() +
scale_size(range = c(4, 10)) +
scale_alpha(range = c(0.2, 1)) +
ease_aes('cubic-in-out') +
labs(x = "Años", y = "Nacimientos") +
theme(axis.text.x = element_text(angle = 45, vjust = 0.5)) +
scale_x_continuous("Año", labels = as.character(Año), breaks = Año) +
labs(size="Tasa de natalidad", alpha ="Tasa de fecundidad") +
theme(panel.grid.major = element_line(Año, color = "white"),
panel.grid.minor = element_blank(), # borrar líneas menores
panel.background = element_rect(fill = "#F2E9E6"),
legend.key = element_rect(fill = "#F2E9E6"))
n0
[Resulting animation of first code chunk]
运行前面的代码会得到一个仅显示动画线的图形,但是我想同时获得动画线和点,并且我尝试过的所有操作都会产生错误或不起作用。
另一方面,以下代码使用动画圆或点渲染了一个动画图,但是我无法为其添加线条,因为一旦添加第二个geom
,它只会返回错误:< / p>
NF <- ggplot(Tarapaca, aes(x = Año, y = Nacimientos)) +
geom_point(aes(size = TasaNatalidad, alpha=TasaFecundidad), color ="#DD4814") +
transition_states(Año, transition_length = 2, state_length = 1, wrap=FALSE) +
shadow_mark() +
ease_aes('cubic-in-out') +
ggtitle('Año {closest_state}') +
scale_size(range = c(4, 10)) +
scale_alpha(range = c(0.2, 1)) +
theme(axis.text.x = element_text(angle = 45, vjust = 0.5)) +
scale_x_continuous("Año", labels = as.character(Año), breaks = Año) +
labs(size="Tasa de natalidad", alpha ="Tasa de fecundidad") +
theme(panel.grid.major = element_line(Año, color = "white"),
panel.grid.minor = element_blank(),
panel.background = element_rect(fill = "#F2E9E6"),
legend.key = element_rect(fill = "#F2E9E6"))
NF
Resulting animation of second code chunk
似乎geom_point
需要transition_states
和geom_line
需要transition_reveal
,但是transition_states
和transition_reveal
彼此不兼容。< / p>
如何在单个图形中将两个动画(即移动的线条和动画的圆)放在一起?