vlambda博客
学习文章列表

使用R语言画个动画试试

本文转载自R语言交流中心

今天给大家介绍一个在R语言中实现gif动图的绘制的包gganimate。此包是ggplot的一个扩展功能,所以在载入的时候会载入ggplot包。

1. 安装和加载R包

首先,我们看下需要安装和加载的包:

install.packages("gifski")
install.packages("magick"# linux系统需要下载此包
install.packages("ggplot2")
install.packages("av")
install.packages("gganimate")
library(gifski)
library(magick)
library(ggplot2)
library(av)
library(gganimate)

接下来我们看下包中主要的函数:

2. transition_states()函数

这个函数用来生成渐变的动画。

transition_states(states, 
                  transition_length = 1
                  state_length = 1,
                  wrap = TRUE
## 主要参数解释
states # 指的是进行转化的各组数据;
state_length # 指的是每个动画暂停的相对速度;
transition_length # 各组之间转化的相对速度;
wrap # 指的是动画最后是否循环回去。

我们直接看个实例:

# 先画个静态图
p <- ggplot(iris, aes(x = Petal.Width, y = Petal.Length)) + 
  geom_point()
plot(p)

只需要在添加transition_states()函数,就可以使ggplot2绘制的静态图转化为动态图。

anim <- p +  
  transition_states(Species,
                    transition_length = 2
                    state_length = 1)
anim
使用R语言画个动画试试
gif录制动图

3. ease_aes()函数

这个函数就是设置渐变动画转化过程中的转化样式。

ease_aes(default = "linear"...

主要就是转化方式的选择:

使用R语言画个动画试试

其中需要function和modifiers配合使用,modifiers主要是设置转化的形式,in代表按原样式;-out代表样式反转。

我们直接看个实例:

anim + ease_aes('cubic-in-out')  # 缓慢开始和结束使图形看起来比较平滑
使用R语言画个动画试试

当然也可以进行对单个坐标轴的转化:

anim + ease_aes(y= 'cubic-in-out'# Sets special ease for y aesthetic
使用R语言画个动画试试

4. ggtitle()函数

这个函数就是添加动态标签,主要是增加每一帧的动画的注释。

ggtitle(label, subtitle = waiver()) 

我们直接看下实例:

anim + ggtitle('Nowshowing {closest_state}'
               subtitle = 'Frame {frame} of {nframes}')
使用R语言画个动画试试

4.转化的一些定义好的行为,如下:

使用R语言画个动画试试

我们就不多做解释,直接看下实例:

anim <- ggplot(iris, aes(x =Petal.Width, y = Petal.Length)) +  
  geom_point(aes(colour = Species), size = 2) +  
  transition_states(Species, transition_length =2, state_length = 1)

anim + enter_fade() + exit_shrink()
使用R语言画个动画试试

当然,除了gif,还可以通过修改animate()中的renderer参数进行动画格式的改变:

使用R语言画个动画试试

这样就可以直接保存为视频文件,我们直接看下实例:

animate(anim + enter_fade() +
          exit_fly(y_loc = 1), 
        renderer = av_renderer())

至此,此包的主要功能我们介绍完了,当然他的应用不仅仅是为了动画,在很多模型的过程可视化中具有很好的应用。

本文转载自R语言交流中心


既往专辑




喜欢点个在看哦!