手把手:如何用R制作动态图

简介:

如何用R制作动态的统计图呢?下面我们以“大数据文摘”国庆献礼的世界独立进程为例,手把手地教大家如何用R制作动态图。

0?wx_fmt=gif

  • 安装制作GIF所需要的ImageMagic程序

http://www.imagemagick.org/script/binary-releases.php网址下载相关的ImageMagic.exe。安装ImageMagic.exe。安装完成后启动Rstudio编写代码。


  • 载入制作动画和地图的R程序包

library(animation)

library(maps)


  • 输入相关数据

由于国家很多,这里只选择几个国家,足够说明问题就可以了。


mtitle <-c("660","1668","1776","1788","1840","1867","1880","1948","1949","1950","1990")

regList<-list(c("Japan"),c("UK"), c("USA"), c("Australia"),c("NewZealand"), c("Canada"), c("France"),c("Korea","South Korea"), c("China","Hungary"),c("Kuwait","India"),c("Russia","Germany","Yemen"))

对区域的列表采用了list形式,同一年成立的国家包含在一个regList[[k]]元素中,这样成立年份就和区域列表的元素一一对应了。


  • 绘图函数绘制地图

采用maps包中的map函数绘制成立区域。代码如下:

#绘制空白世界地图

map("world")

#添加独立区域,着色

map("world", region=reg,exact=FALSE, add=TRUE, fill=TRUE, col="pink")


  • 制作动态图

  • 同一种颜色填充的世界独立进程动态图

#设定动画的时间间隔和帧数

oopt = ani.options(interval = 0.2, nmax =11)

#生成动画

for (i in 1:ani.options("nmax")){

map("world")

reg=""

reg=regList[[1]]

if (i>1) {

for (k in 2:i) {reg =c(reg,regList[[k]])}

}

map("world", region=reg, exact=FALSE, add=TRUE, fill=TRUE,col="pink")

title(mtitle[i])

#等待interval设置的时间长度

ani.pause()

}

#重载动画options

ani.options(oopt)

  1. 根据年份的不同,用不同颜色填充的世界独立进程动态图

oopt = ani.options(interval = 0.2, nmax =11)

amax=ani.options("nmax")

for (i in 1:amax) {

map("world")

for (k in 1:i) {

map("world",region=regList[[k]], exact=FALSE, add=TRUE, fill=TRUE,col=rgb(k+15,16,16,max=3*amax))

}

title(mtitle[i])

ani.pause()

}

ani.options(oopt)

  • 生成HTML文件或GIF

  • 生成HTML文件

library(maps)

library(animation)


#设定网页文件所在目录

setwd("…./webpage")


mtitle <-c("660","1668","1776","1788","1840","1867","1880","1948","1949","1950","1990")

regList <- list(c("Japan"),c("UK"), c("USA"), c("Australia"),c("NewZealand"), c("Canada"), c("France"), c("Korea","SouthKorea"),c("China","Hungary"),c("Kuwait","India"),c("Russia","Germany","Yemen"))


saveHTML(

{

oopt = ani.options(interval = 0.2, nmax =11)

amax=ani.options("nmax")

for (i in 1:amax) {

map("world")

for (k in 1:i) {

map("world",region=regList[[k]], exact=FALSE, add=TRUE, fill=TRUE,col=rgb(k+15,16,16,max=3*amax))

}

title(mtitle[i])

ani.pause()

}

ani.options(oopt)

},img.name = "map1", imgdir ="./img", htmlfile = "map.html",

autobrowse =FALSE, title = "Demo of Country Independents")


  1. 生成GIF

library(maps)

library(animation)


#设定GIF 图片所在目录

setwd("…./")


mtitle <-c("660","1668","1776","1788","1840","1867","1880","1948","1949","1950","1990")

regList <- list(c("Japan"),c("UK"), c("USA"), c("Australia"),c("NewZealand"), c("Canada"), c("France"),c("Korea","SouthKorea"),c("China","Hungary"),c("Kuwait","India"),c("Russia","Germany","Yemen"))


saveGIF(

{

oopt = ani.options(interval = 0.2, nmax =11)

amax=ani.options("nmax")

for (i in 1:amax) {

map("world")

for (k in 1:i) {

map("world",region=regList[[k]], exact=FALSE, add=TRUE, fill=TRUE,col=rgb(k+15,16,16,max=3*amax))

}

title(mtitle[i])

ani.pause()

}

ani.options(oopt)

},movie.name="demo.gif",img.name="map1")


粗略的就介绍到这里了。还可以生成flash等其他的动画,不一一列出了。祝大家工作、生活愉快!


原文发布时间为:2015-11-02

本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号

相关文章
|
4月前
|
存储 开发者
彻底搞懂微信小游戏制作工具中的函数
彻底搞懂微信小游戏制作工具中的函数
45 0
|
4月前
|
图形学
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
113 0
|
4月前
微信小游戏制作工具关于游戏屏幕适配,看这篇就够了!
微信小游戏制作工具关于游戏屏幕适配,看这篇就够了!
85 0
|
9月前
|
前端开发 JavaScript
Threejs入门进阶实战案例(3):视频贴图的解决方案
Threejs入门进阶实战案例(3):视频贴图的解决方案
225 0
|
4月前
Midjourney如何使用
Midjourney如何使用
58 0
|
8月前
|
存储 人工智能
|
8月前
|
前端开发 算法 JavaScript
手把手教你制作简易计算器
手把手教你制作简易计算器
60 0
|
11月前
微信小游戏制作工具中的等待积木应该如何使用?
生活中我们总避免不了要等待,整装待发的准备去公司开始新一天的奋斗,但是公交车却迟迟不来,需要等待。一家人订好了周末出游计划,正准备出门,老婆要再选件衣服,擦个脸,需要等待。打开电视看想看的节目,出来了 60 秒的广告,需要等待……
83 0
|
11月前
|
存储 Serverless
微信小游戏制作工具中的函数应该如何使用
在微信小游戏制作工具中是没有私有函数这个概念的,也就是说所有的函数都是公共的,大家都可以使用,而且函数也没有返回值的概念,想拿到函数运行的结果只能通过设置一个全局变量,将结果存储在全局变量中,然后通过这个全局变量来使用。这种方法有很多的弊端,尤其是在有大量的克隆体存在时,每个克隆体都使用同一个函数,都去设置同一个全局变量,就会造成意想不到的结果。
213 0
|
机器学习/深度学习
1 分钟搞定!ChatGPT + XMind 打造最高效的思维导图
1 分钟搞定!ChatGPT + XMind 打造最高效的思维导图
937 1