gganimate动画GIF | 让你的图形跳动起来!!!
时间:2022-07-22
本文章向大家介绍gganimate动画GIF | 让你的图形跳动起来!!!,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
R语言绘制数据动图
随着互联网+和大数据科技的发展,VFX可视化和数据可视化越来越受到人们的喜爱,在R语言中,绘制GIF动图主要是在gganimate包中运行,制作视频主要是在av包,gganimate是图形语法的扩展,由ggplot2包实现,它增加了对使用ggplot2用户熟悉的API声明动画的支持
01
加载包
library(av)
library(ggplot2)
library(gganimate)
library(tidyverse)
library(lubridate)
02
箱形图.gif
#构建数据框
为了节省时间,直接使用系统内置的mpg数据框,mpg的部分数据如下:
#绘图
ggplot(mpg,aes(class,hwy,fill=class))+geom_boxplot()+transition_states(cty,transition_length=2,state_length=1)+enter_fade()+exit_shrink()+ease_aes('sine-in-out')
03
小提琴图.gif
#构建数据
直接使用系统内置的mpg数据框。
ggplot(mpg,aes(class,hwy,fill=class))+geom_violin(alpha=0.3,width=0.9)+geom_jitter(shape=21)+transition_states(year,transition_length=8,state_length=5)+enter_fade()+exit_shrink()+ease_aes('sine-in-out')
04
多因素散点图.gif
#构建数据框或导入
使用iris数据框,部分数据如下:
#绘图
ggplot(iris, aes(x = Petal.Width, y = Petal.Length)) + geom_point(aes(colour = Species)) +transition_states(Species,transition_length = 2,state_length = 1)
05
散点图.gif
#载入数据
library(gapminder)
View(gapminder)
#绘图
ggplot(gapminder,aes(gdpPercap,lifeExp,size=pop,colour=country))+geom_point(alpha=0.7,show.legend=FALSE)+scale_colour_manual(values=country_colors)+scale_size(range=c(2,12))+scale_x_log10()+facet_wrap(~continent)+labs(title='Year:{frame_time}',x='GDP per capita',y='life expectancy')+transition_time(year)+ease_aes('linear')
06
条形图
#构建数据
library(nCov2019)
x1=load_nCov2019()
province1=summary(x1)
View(province1)
#数据提取累计确诊人数,并对表格的列名更改
data_province1=data.frame(time=province1$time,name=province1$province,cum_confirm=province1$cum_confirm)
province1$time=ymd(province1$time)
View(data_province1)
#删除湖北省的数据
data_province2 <- read_csv("~/Desktop/gganimate动画/data_province2.csv")
data_province2$time=ymd(data_province2$time)
View(data_province2)
#设置绘图主题
mytheme=theme(plot.title = element_text(face = "bold",hjust = 0.5,size=20,color = "black"),plot.subtitle=element_text(face = "bold",hjust = 0.5, size = 18, color = "red"),
plot.caption = element_text(face = "bold",size = 10),axis.title=element_text(face = "bold",hjust = 0.5,size=12,color="black"),panel.grid=element_blank(),panel.background=element_rect(fill='grey90'),axis.text.x=element_blank())
#绘制GIF图
ggplot(data_province1, aes(x=reorder(name,cum_confirm),y=cum_confirm, fill=name,frame=time)) +geom_bar(stat="identity",position="stack",width=1,size=0.25,show.legend=FALSE)+geom_text(aes(label=paste(cum_confirm)),col="red",hjust=-0.1)+coord_flip()+mytheme+transition_manual(time)+labs(title="2019 nCov Visualization",subtitle='Now showing time: {current_frame}',caption="Origin:package nCov2019")+ease_aes('linear')
#为了使得GIF图效果更加明显,删除湖北的数据后绘制
ggplot(data_province2, aes(x=reorder(name,cum_confirm),y=cum_confirm, fill=name,frame=time)) +geom_bar(stat="identity",position="stack",width=1,size=0.25,show.legend=FALSE)+geom_text(aes(label=paste(cum_confirm)),col="red",hjust=-0.1)+coord_flip()+mytheme+transition_states(time)+ease_aes('linear')
小结
得到这个动画主要是添加了一种类型的转换。转换是解释情节数据的函数,以便以某种方式将其分配到多个帧上。transition_states()专门根据数据中的一个变量(比如物种)将数据分割成子集,并计算中间数据状态,以确保状态之间的平稳过渡(称为渐变)。
- 当transition_states()为渐变计算中间数据时,它需要决定从一个值到另一个值的变化应该如何进行。这是一个叫做缓动的概念。默认的缓动是线性的。
- 设置easing是使用ease_aes()函数完成的。第一个参数设置默认的缓动,随后的命名参数为特定的美学设置缓动。
- Label:如果没有任何关于每个时间点与什么的指示,就很难理解动画。gganimate通过为每个帧提供一组变量来解决这个问题,这些变量可以使用glue语法插入到plot标签中。
- Enter and Exit:输入Enter和exit函数。这些函数负责修改出现(进入)和消失(退出)数据的状态,以便动画可以在新状态和新状态之间进行转换。
- 【Scikit-Learn 中文文档】集成方法 - 监督学习 - 用户指南 | ApacheCN
- 2017黑科技 颠覆生活哪家强?
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【解读ServiceCallSite 】
- ASP.NET MVC的View是如何呈现出来的[实例篇]
- 把人类向机器人乞讨,变成对机器人征税
- 印度6大科技真相 会让很多人大吃一惊
- 了解ASP.NET MVC几种ActionResult的本质:HttpStatusCodeResult & RedirectResult/RedirectToRouteResult
- Python原创0基础入门一看几张图就学会了
- ASP.NET Core中的依赖注入(5):ServicePrvider实现揭秘【补充漏掉的细节】
- 了解ASP.NET MVC几种ActionResult的本质:FileResult
- ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求
- 如何用Python和深度神经网络识别图像?
- 余军:分布式数据库在金融行业的创新实践
- 微信小游戏采用了我们都忽略的产品推广新切入点
- 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 数组属性和方法
- 【C语言简单说】三:整数变量扩展和输出扩展(3)
- 【C语言简单说】三:浮点数变量和字符变量(4)
- 【C语言简单说】三:变量总结ASCII码扩展(5)
- 【C语言简单说】四:常量
- 【C语言简单说】五:常用运算符
- 【C语言简单说】六:取模运算符以及变量的扩展
- 【C语言简单说】七:自定义函数(1)
- 【C语言简单说】七:自定义函数(2)
- 【C语言简单说】七:自定义函数(3)
- 【C语言简单说】八:分支结构之if(1)
- 【C语言简单说】八:分支结构之if...else...(2)
- 【C语言简单说】八:分支结构之if...else if()...else...(3)
- 【C语言简单说】九:输入
- 【C语言简单说】十:小结
- 【C语言简单说】十一:switch 补