gganimate:构建R语言可视化gif动图
gganimate简介
gganimate是一款基于ggplot2的动态可视化扩展包,简单就是将ggplot2绘图对象转为gif动图的形式,这对于一些统计分析原理和可视化展示尤为重要,可以让抽象的数理理论更加形象化,也便于理解和方便课堂教学。 gganimate包的安装本身没有什么麻烦,但是这个包脾气倔,需要本地提前安装好ImageMagick这个软件,ImageMagick是一款功能强大且开源的图片处理和开发的软件包,安装的时候总是莫名其妙的报错,小编废了好大周折才搞定,能不能一次性安装成功还得看运气。 windows系统下ImageMagick下载地址如下:
ImageMagick
gganimate的安装如下:
devtools::install_github("dgrtwo/gganimate")
就像刚刚提到的那样,gganimate的本质思想没什么特别的,就是将ggplot2对象进行动态化,核心函数与包同名,就是 gganimate()
,绘图思想与ggplot2同理, gganimate()
特殊之处在于在除了为绘图提供x,y以及color,size这样的美学映射之外,还必须提供一个所谓的 frame
映射,具体怎么理解这个 frame
映射,还得拿例子说。比如说我们想绘制某国人口随时间变化的一个ggplot2动态图,那么这个时间就是 frame
映射。话不多说,且看下面的绘图实例。
绘图实例
先加载一些必备包,这里我们使用的是 gapminder
的包中的全球主要国家在1952-2007年的GDP增长、人口变化以及预期寿命等方面的数据。现在我们想用 gganimate
探索一下各大洲各主要国家GDP增长、预期寿命和人口增长是如何随时间变化的。
library(gapminder)
library(ggplot2)
theme_set(theme_bw())
先利用 ggplot2
绘制静态图(不带时间的 frame
):
g <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent, frame = year)) +
geom_point() +
scale_x_log10()
然后利用 gganimate()
函数进行动态化:
library(gganimate)
gganimate(g)
我们也可以将绘制出来的gif动图直接以相应的格式进行输出保存到本地:
gganimate(g, "output1.gif")
当然,除此之外,我们也可以根据个人喜好对动图做一些个性化的设置:
g2 <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop)) +
geom_point() +
geom_point(aes(frame = year), color = "red") +
scale_x_log10()
gganimate(g2)
有时候还可以运用一些统计方法:
g3 <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, frame = year)) +
geom_point() +
geom_smooth(aes(group = year), method = "lm", show.legend = FALSE) +
facet_wrap(~continent, scales = "free") +
scale_x_log10()
gganimate(g3)
用于现场的统计教学也未尝不可,下面动图展示了局部加权回归的散点平滑法:
这样的动态化演示图,是不是能帮助大家更好的学习统计学?
参考资料:
https://github.com/dgrtwo/gganimate
https://simplystatistics.org/2017/08/08/code-for-my-educational-gifs/
往期精彩:
使用jupyter notebook搭建数据科学最佳交互式环境
一个数据科学热爱者的学习历程