无法使用gganimate为geom_line和geom_point设置动画

时间:2019-07-25 03:22:24

标签: r ggplot2 gganimate

我正在用ggplot2和gganimate制作动画图,其中geom_linegeom_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_statesgeom_line需要transition_reveal,但是transition_statestransition_reveal彼此不兼容。< / p>

如何在单个图形中将两个动画(即移动的线条和动画的圆)放在一起?

0 个答案:

没有答案