查看原文
其他

gganimate:构建R语言可视化gif动图

louwill 机器学习实验室 2019-04-07

gganimate简介

      gganimate是一款基于ggplot2的动态可视化扩展包,简单就是将ggplot2绘图对象转为gif动图的形式,这对于一些统计分析原理和可视化展示尤为重要,可以让抽象的数理理论更加形象化,也便于理解和方便课堂教学。 gganimate包的安装本身没有什么麻烦,但是这个包脾气倔,需要本地提前安装好ImageMagick这个软件,ImageMagick是一款功能强大且开源的图片处理和开发的软件包,安装的时候总是莫名其妙的报错,小编废了好大周折才搞定,能不能一次性安装成功还得看运气。 windows系统下ImageMagick下载地址如下:

ImageMagick

      gganimate的安装如下:

  1. devtools::install_github("dgrtwo/gganimate")

      就像刚刚提到的那样,gganimate的本质思想没什么特别的,就是将ggplot2对象进行动态化,核心函数与包同名,就是 gganimate(),绘图思想与ggplot2同理, gganimate()特殊之处在于在除了为绘图提供x,y以及color,size这样的美学映射之外,还必须提供一个所谓的 frame映射,具体怎么理解这个 frame映射,还得拿例子说。比如说我们想绘制某国人口随时间变化的一个ggplot2动态图,那么这个时间就是 frame映射。话不多说,且看下面的绘图实例。

绘图实例

      先加载一些必备包,这里我们使用的是 gapminder的包中的全球主要国家在1952-2007年的GDP增长、人口变化以及预期寿命等方面的数据。现在我们想用 gganimate探索一下各大洲各主要国家GDP增长、预期寿命和人口增长是如何随时间变化的。

  1. library(gapminder)

  2. library(ggplot2)

  3. theme_set(theme_bw())

      先利用 ggplot2绘制静态图(不带时间的 frame):

  1. g <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent, frame = year)) +

  2.  geom_point() +

  3.  scale_x_log10()

      然后利用 gganimate()函数进行动态化:

  1. library(gganimate)

  2. gganimate(g)

      我们也可以将绘制出来的gif动图直接以相应的格式进行输出保存到本地:

  1. gganimate(g, "output1.gif")

      当然,除此之外,我们也可以根据个人喜好对动图做一些个性化的设置:

  1. g2 <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop)) +

  2.  geom_point() +

  3.  geom_point(aes(frame = year), color = "red") +

  4.  scale_x_log10()

  5. gganimate(g2)

      有时候还可以运用一些统计方法:

  1. g3 <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, frame = year)) +

  2.  geom_point() +

  3.  geom_smooth(aes(group = year), method = "lm", show.legend = FALSE) +

  4.  facet_wrap(~continent, scales = "free") +

  5.  scale_x_log10()

  6. gganimate(g3)

      用于现场的统计教学也未尝不可,下面动图展示了局部加权回归的散点平滑法:

        这样的动态化演示图,是不是能帮助大家更好的学习统计学?




参考资料:

https://github.com/dgrtwo/gganimate

https://simplystatistics.org/2017/08/08/code-for-my-educational-gifs/



往期精彩:

使用jupyter notebook搭建数据科学最佳交互式环境

R编程特性1:向量与向量化

R Markdown|可能是你数据分析报告最好的解决方案

如何写出整洁规范的R代码?是时候讨论一下代码规范性了

R语言向量化运算:apply函数族用法心得

Python面向对象编程:数据封装、继承和多态

[译]为什么R语言是当今最值得学习的数据科学语言






一个数据科学热爱者的学习历程



长按二维码.关注数据科学家养成记









    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存