用R语言让你的图动起来!
在讲述由数据驱动的故事时,动画往往比其他形式更加引人注目。我们的眼睛天然地被鲜艳的色彩和动作所吸引。优秀的可视化可以引起观众的兴趣,给他们留下深刻的印象。幸运的是,一系列便捷的R语言包使可视化过程变得非常简单。本文中的所有可视化案例都可以进一步分解,并在MatrixDS项目中运行。读者只需要对基本绘图有一定了解即可。
在开始制作图表之前,首先应该问问自己:是不是非要做动态图不可?如果你正在进行探索性数据分析,那么一个运动的图形可能不是你的最佳选择。但是,如果你需要进行演示,那么一些精心设计的动画图形可以让观众更加了解你的演讲主题,这当然要比静态的图形展示更加富有表现力。
创建动画时,图片实际上不会移动。其实,我们只是构建了很多单独的图片,然后像放电影一样把这些帧串联在一起,就像是老式的翻书动画和卡通片。当制作动画的时候,每一帧都来自不同的图。这些图是利用聚合数据的子集构建的,把这些子集缝合在一起就形成了动画流动。
动态数据可视化的构成机制
数据的子集越多,画面就会更加平滑。这是动画需要考虑的重要因素。如果每一层的数据太少,最后只能够生成几帧,那么动态效果就不那么明显。这种情况下,建议使用静态面板图。这种图可以在ggplot中创建,比如使用分面。另一种方法是使用插值法和tweener包来扩展数据集。
动画的优势之一是它可以拓展我们能够可视化的变量个数,我们可以让数据集中的变量来“驱动”动画。上图是利用含有六个变量的数据集构建的,动画能够很好地捕捉着这六个变量的变化!数据样式如下:
我们可以使用这六个变量中的任意一个进行动态显示。不过不动脑筋就随便选是非常危险的。有些变量比其他变量更适合动态显示。例如,动画随时间而发生变化是不言而喻的;所以,使用分类变量来生成动画就会非常混乱。
GDP可视化的正确使用方式:慢慢滚动。
GDP可视化的错误使用方式:我不知道这图在干什么……
动画在这些使用场景中比较有价值:
1.随着时间而变化;
2.迭代/递归技术产生的变化(比如梯度下降和贝尔曼方程)
3.在随机模拟中的变化
需要注意的关键点在于数据中的重要变化,我们要用这个变化的变量来驱动动画。
下面让我们来进行实践操作!这些代码都可以在MatrixDS项目中找到。
程序包
推荐四个R语言动画制作包:
1.animate:可以让任意格式的图片动画化,作者是谢益辉
2.gganimate:可以把ggplot创建的图像动画化,作者是ThomasLinPedersen
3.plotly:一个具有动画功能的交互式绘图库
4.googlevis:基于Flash的动态图制作方案
总体上讲,animate包提供了最全面的控制力,对于基本图形很有用,但代码可能很冗长。另一方面,gganimate包仅支持一个绘图库,但可以非常容易地将ggplot转化为动画(在绘图代码中添加一两行代码即可)。与gganimate类似,plotly只能对自身支持的绘图进行可视化设置。Googlevis受到的限制是最多的,只支持基于Flash的一种动画制作,这种图的应用面越来越窄。
使用animate
使用animate包的话,如果你已经参照文档并安装了所需的软件,可以导出五种格式的文件:
1.HTML(可以带控件)
2.Video(mp4)
3.GIF
4.LaTeX
5.Flash
这个软件包非常棒,其中一大原因就是它提供了很多内置的统计图形作为示例。这里我们展示一个带控件的HTML页面,它用动画显示了梯度下降的过程:
library(animate)
desc=c(“ThisisasupercoolexampleofGradientDescent”)
saveHTML({
f1=function(x,y)x^2+3*sin(y)
xx=grad.desc(f1,pi*c(-2,-2,2,2),c(-2*pi,2))
xx$persp(col=”lightblue”,theta=30,phi=30)
},title=”DemoofGradientDescent”,description=desc,verbose=FALSE)
梯度下降的示例(利用animate包)
有的时候你希望用户能够使用控件来控制动画效果。在这个示例中,你可能想要通过暂停3D曲面图像来得到最后一帧的图片。具有此类控件的动画实时版本托管在MatrixDS项目中的静态Web服务器上。
这个软件包最强大的功能是可以使用任何可视化工具来搭建框架,例如上面对比可视化是否合适的案例就是使用了animate和ggplot来构建的。
使用gganimate
使用gganimate包,默认导出是GIF格式的文件(使用gifski,必须先安装rust)。不过根据用户的具体要求,还可以导出其他格式。本文中的第一个动画示例是使用gganimate包构建的(实际上它是包中自带的README文档中唯一完整的实际数据示例)。下面我们展示这个软件包wiki中的另外一个案例,最终输出了一个视频格式的文件(作者是TomWestlake)。这是一个Anscombe四重奏的新变换,这一系列的图都有同样的统计学汇总数值,其中一个图看起来像一个恐龙!所有的这些只需要在ggplot基础上加入几行额外代码。
library(datasauRus)
library(ggplot2)
library(gganimate)
ggplot(datasaurus_dozen,aes(x=x,y=y))+
geom_point()+
theme_minimal()+
transition_states(dataset,3,1)+
ease_aes(‘cubic-in-out’)
这是数据小恐龙!
使用Plotly
最后一个要介绍的包是plotly,很多可视化从业者与这个包都有过充满爱恨情仇的故事。它让我们能够简单地创建精美的交互式图,但是操作简单是以灵活性和风格的损失为代价的,而且绘图之后你还必须想办法清除plotly的logo。不过我觉得这些麻烦事还是值得的。下面的例子中,我们演示了plotly文档的一个示范(使用了frame参数)。它跟上面的gganimate包的例子一样,都使用了gapminder数据集:
library(plotly)
library(gapminder)
p%
plot_ly(
x=~gdpPercap,
y=~lifeExp,
size=~pop,
color=~continent,
frame=~year,
text=~country,
hoverinfo=”text”,
type=’scatter’,
mode=’markers’
)%>%
layout(
xaxis=list(
type=”log”
)
)
一旦你完成了绘图,就可以将其送入plotly的托管服务。这里面你可以使用所有绘图的嵌入组件,包括播放按钮。这其实上是在媒体上获取交互式图形的少数方法之一!它的一个缺点是,免费版的图形托管服务最多只能放25张图。
Gapminder可视化的plotly版本(https://plot.ly/~RPlotBot/4595.embed?autosize=true&referrer=https%3A%2F%2Ftowardsdatascience.com%2Fmedia%2Fe98cacd5d473a475392495880b6ed2e2%3FpostId%3Df94ae20843e3)
小结
现在,你拥有了在R语言中构建动画可视化所需的一切。你可以将这些动画放在演示文稿、网站和博客中。
编译组:韦振琛、黄天元
如需转载,请后台留言,遵守转载规范
主题测试文章,只做测试使用。发布者:最新稳定辅助网,转转请注明出处:https://www.744broad.com/16623.html