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

2020-08-06 14:59:53 浏览数 (1)

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函数。这些函数负责修改出现(进入)和消失(退出)数据的状态,以便动画可以在新状态和新状态之间进行转换。

0 人点赞