前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >gganimate动画GIF | 让你的图形跳动起来!!!

gganimate动画GIF | 让你的图形跳动起来!!!

作者头像
黑妹的小屋
发布2020-08-06 14:59:53
1.6K0
发布2020-08-06 14:59:53
举报

R语言绘制数据动图

随着互联网+和大数据科技的发展,VFX可视化和数据可视化越来越受到人们的喜爱,在R语言中,绘制GIF动图主要是在gganimate包中运行,制作视频主要是在av包,gganimate是图形语法的扩展,由ggplot2包实现,它增加了对使用ggplot2用户熟悉的API声明动画的支持

01

加载包

代码语言:javascript
复制
library(av)
library(ggplot2)
library(gganimate)
library(tidyverse)
library(lubridate)

02

箱形图.gif

#构建数据框

为了节省时间,直接使用系统内置的mpg数据框,mpg的部分数据如下:

#绘图

代码语言:javascript
复制
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数据框。

代码语言:javascript
复制
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数据框,部分数据如下:

#绘图

代码语言:javascript
复制
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

#载入数据

代码语言:javascript
复制
library(gapminder)
View(gapminder)

#绘图

代码语言:javascript
复制
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

条形图

#构建数据

代码语言:javascript
复制
library(nCov2019)
x1=load_nCov2019()
province1=summary(x1)
View(province1)

#数据提取累计确诊人数,并对表格的列名更改

代码语言:javascript
复制
data_province1=data.frame(time=province1$time,name=province1$province,cum_confirm=province1$cum_confirm)
province1$time=ymd(province1$time)
View(data_province1)

#删除湖北省的数据

代码语言:javascript
复制
data_province2 <- read_csv("~/Desktop/gganimate动画/data_province2.csv")
data_province2$time=ymd(data_province2$time)
View(data_province2)

#设置绘图主题

代码语言:javascript
复制
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图

代码语言:javascript
复制
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图效果更加明显,删除湖北的数据后绘制

代码语言:javascript
复制
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函数。这些函数负责修改出现(进入)和消失(退出)数据的状态,以便动画可以在新状态和新状态之间进行转换。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 菜鸟学数据分析之R语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档