R语言动态可视化:制作历史全球平均温度的累积动态折线图动画gif视频图
原文链接:http://tecdat.cn/?p=9766
在某些情况下,你可能希望通过在每帧中添加数据并保留先前添加的数据来进行动画处理。
现在,我们将通过制作点线图的动画来探索。
以下是制作图表静态版本的代码:
# load datawarming <- read_csv("warming.csv")# draw chartwarming_plot <- ggplot(warming, aes(x = year, y = value)) + geom_line(colour="black") + geom_point(shape = 21, colour = "black", aes(fill = value), size=5, stroke=1) + scale_x_continuous(limits = c(1880,2017)) + scale_y_continuous(limits = c(-0.5,1)) + scale_fill_distiller(palette = "RdYlBu", limits = c(-1,1), guide = FALSE) + xlab("") + ylab("Difference from 1900-2000 (ºC)") + theme_minimal(base_size = 16, base_family = "Georgia")
结果应该是:
该文件warming.csv
包含字段year
和value
,后者是全球年平均气温,相比于1900-2000的平均水平。
因为这是一个点-线图,它包括geom_line
与geom_point
层。我们可以将轮廓设置color
为黑色,然后aes
根据温度使用映射将其填充为颜色value
。
该代码用于scale_fill_distiller
使用ColorBrewer调色板,该调色板从冷蓝色,中性黄色到暖红色,并将它们应用于从-1到+1的一系列值。
同样,我们可以设置数据动画:
代码的工作方式
-
transition_reveal
。当along
时间变量的每个值添加到图表中时,这将保留先前显示的数据。id
通过使其等于所讨论的类别变量,可用于为多个类别创建单独的行;否则使用id = 1
。
transition_reveal
其默认是显示线条,仅绘制当前帧的点:
要创建点的累积动画,使用如下代码:
-
shadow_mark
保留先前帧中的数据。
使用for循环绘制并保存每年的图表
要制作点和线的累积动画,我们需要编写一个循环为每帧创建一个单独的图像。
for循环:
# make a list of years, from 1880 to 2017years <- c(1880:2017)# for loop to print each year to the console, pausing for one second each timefor (y in years) { print(y) Sys.sleep(1) }
输出:
[1] 1880[1] 1881[1] 1882[1] 1883[1] 1884[1] 1885[1] 1886[1] 1887
代码的第一行创建一个整数列表,其范围为1880年至2017年。
这部分代码将遍历列表中的每个条目:for (y in years)
。
该代码使用相同的原理来绘制并保存每年的图表:
该代码如何工作
对于每一年,y
该代码首先都会使一个称为R的R对象。
然后,它创建一个名为的R对象chart
,这是从该数据绘制的静态ggplot2图表。
然后,使用该ggsave
函数以定义的尺寸和分辨率保存该图表,从而在循环上进行进度更新。
该ggsave
代码利用了R函数paste0
。
将帧合并为GIF和视频
首先使用制作GIF:
# make a GIF with ImageMagicksystem("convert -delay 10 charts/*.jpg warming2.gif")# increase delay on final frame of GIFsystem("convert warming2.gif \( +clone -set delay 300 \) +swap +delete warming2_with_pause.gif")
这段代码创建了一个名为的GIF warming2.gif
。现在制作视频:
# make a video with FFmpegsystem("ffmpeg -f image2 -start_number 1880 -i charts/%d.jpg -vf 'scale=trunc(iw/2)*2:trunc(ih/2)*2' warming.mp4")# change the speed of the videosystem("ffmpeg -i warming.mp4 -vf 'setpts=2*PTS' warming_slow.mp4")
image2
根据图像序列创建视频。
制作动画,在模拟人类对全球平均气温的影响与自然影响之间进行切换
循环动画还可以用于在不同状态或数据的筛选视图之间切换。为了说明这一点,我们将加载NASA数据,该数据显示来自气候模型的模拟,该模拟比较了自然事件(例如,来自太阳的辐射变化和来自火山喷发的烟尘的冷却效应)在自然事件的影响下的全球平均温度将如何变化。对人类的影响,主要是二氧化碳和其他温室气体的排放。
代码的工作方式
-
transition_state
。这会在数据的不同过滤状态之间切换,此处由变量定义type
。 -
ease_aes
使用状态过渡动画时,使用可改变过渡速度的选项 -
"{closest_state}"
在ggtitle
函数中使用会在此处显示用于定义状态的变量的适当值type
。
GIF应该如下所示:
- 16.3 安装Tomcat
- 16.2 安装jdk
- UITabBarController实现Tab切换
- React Native库版本升级与降级
- Java并发学习之Volatile及内存模型探究
- Java并发学习之CountDownLatch实现原理及使用姿势
- Linux基础(day58)
- 携程Android App插件化和动态加载实践
- 15.5 使用pure-ftpd搭建ftp服务
- JDK容器学习之Queue: ArrayBlockingQueue
- 手机APP安装包缩减方案
- react-native添加redux支持
- Java并发学习之ReentrantLock的工作原理及使用姿势
- Linux基础(day63)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 客户决策 | 我的代码没有else
- LeetCode 1595 Minimum Cost to Connect Two Groups of Points (动态规划)
- js DOM系统
- css的radial-gradient大详解
- 你想知道的优惠券业务,SkrShop告诉你
- js汇率计算器系统
- 数学--数论--欧拉降幂和广义欧拉降幂(实用好理解)
- JS逐步教你做(自己版本)的视频播放器(我先声明,step我不懂是什么意思,所以没用)
- 【mysql系列】细谈“explain”之理论Part
- 如果用java swing编写一个五子棋(人人对战)
- 【mysql系列】细谈explain执行计划之“谜”
- 洛谷 P1352 没有上司的舞会(树形 DP)
- CF思维联系– CodeForces - 991C Candies(二分)
- 洛谷P1122 最大子树和 树形DP初步
- JAVA_WEB--jsp语法