如何在R里面画一个动态图形之:gganimate 让你的统计图动起来!

--原文链接--

image.png

在绘图中,我们经常看到有动态的统计图,当然,在实际科研论文发表的时候,动图应用的比较少,但是在做ppt展示成果的时候,完全可以贴几张动态图,使可视化效果更好。下面开始我们学习旅程吧!

动态交互图的绘制在R中应用比较多的就是使用gganimate包,本文也主要是基于这个包讲解。首先,需要了解的是动图的原理:GIF格式的动图其实和动画片是相同的道理,就像是老式电影胶片,将多个图片按照顺序依次展示,给人一种动态的效果。在R语言中,也是将数据绘制成多个图像,然后按照一定的顺序依次播放,达到动态的效果。


image.png

先安装所需要的包:

install.packages("devtools")
devtools::install_github("jl5000/barRacer")
install.packages("gapminder")
install.packages("gifski")

为使绘制动态图更加方便,有人开发了barRacer包用来快捷的绘制动态图,以网站的例子试一下:

代码来自网站 https://github.com/jl5000/barRacer

library(barRacer)
bar_chart_race(gapminder::gapminder, cat_col=country, val_col=pop, time_col=year,
               max_bars=20,duration=10,fps=10,width=1200,
               height=900,title = "Population over time")
plot1.gif

数据展示不同年每个国家人口数的情况,以时间为线动态展示出来(点击一下上图观看效果)。


image.png

gganimate包是包含了各种动态图绘制函数的比较常用的工具,柱状图、点图、线图、箱型图等各种动态图的绘制均离不开这个包。具体的实现的方法请往下看:

▉ 先看一下包里的函数


image.png

函数有些多,这里简单介绍几个,方便于后边的使用:
animate:调整图像动态效果

anim_save: 保存所绘制的图像

enter: 设置图像进去的行为方式

exit: 设置图像退出的行为方式

shadow_mark: 将原始已出现过的数据保留在图中

shadow_trail: 在移动轨迹上设置一定的长度保留一个数据

shadow_wake: 设置图形移动轨迹上的足迹

transition_components: 在动态周期内转换单个组件

transition_events: 使单个组件依次进入和退出,适用于柱状图

transition_filter: 在不同组件之间进行切换

transition_layers: 按照不同图层进行展示不同分组

transition_manual: 通过直接指定框架成员来创建动画

transition_null: 保持所有数据一致性展示

transition_reveal: 按照一个序列依次展示数据

transition_states: 根据数据不同阶段进行过渡展示

transition_time: 在时间序列上展示

view_follow: 根据数据分布位置移动绘图面板

view_static: 规定某一个窗口展示数据

view_step: 随着数据进行梯度展示

参数有点难懂,还是用例子画图观察不同的效果来认清一下他们比较方便:

使用包gapminder里的数据作为展示示例,先画一个点图:

library(ggplot2)
ggplot(gapminder,aes(x=gdpPercap,y=lifeExp,size=pop,color=country))+
  geom_point(show.legend=F,alpha=0.7)+
  scale_color_viridis_d()+
  scale_size(range=c(2,12))+
  scale_x_log10()+
  labs(subtitle = 'year:{frame_time}',title="abs")
image.png
  1. 通过函数transition_time() 添加动态图:


    plot2.gif
  2. 可以通过函数shadow_mark() 将原始数据也显示在背景中:(如下图)


    plot3.gif
  3. 可以通过函数shadow_wake为点的移动轨迹加个小尾巴:(如下图)


    plot4.gif
  4. 可以通过函数shadow_trail() 在点的移动轨迹上每隔一定梯度添加一个轨迹点,然后设置在一定时间后从尾部消失(注意观察下图中最右边单个点的轨迹):


    plot5.gif

函数transition_states()和view_zoom() 可以用来根据点的分布位置缩放显示:

原始点分布图如下:

ggplot(iris, aes(Petal.Length, Petal.Width, colour = Species)) +
  geom_point(show.legend = F)

image.png


plot7.gif


plot8.gif


plot9.gif


plot10.gif


plot11.gif


plot12.gif

plot13.gif


plot14.gif


plot15.gif

点图基本上介绍完了,现在开始学习一下柱状图的动态效果:

先加载数据

mean.temp <- airquality %>%
  group_by(Month) %>%
  summarise(Temp=mean(Temp)) %>%
  mutate(class="A")

mean.temp

# A tibble: 5 x 3
  Month  Temp class
    
1     5 65.5 A
2     6 79.1 A
3     7 83.9 A
4     8 84.0 A
5     9 76.9 Axian'ka

先看一下静态图是什么样子的:

ggplot(mean.temp,aes(Month,Temp,fill=Temp))+
  geom_col()+
  theme_minimal()+
  theme(legend.position = "right")

image.png


plot16.gif


plot17.gif

柱状图介绍完了,接着我们来看折线图:

折线图也可以根据一个时间尺度进行动态化展示,如下图为不同月份的空气温度数据绘制的折线图和点图,进行动态展示后视觉效果会更好。


image.png

使用transition_reveal()函数添加动画


plot18.gif

除此之外,gganimate包还可以给箱型图、点阵图等加动态效果,喜欢的小伙伴赶紧去尝试一下吧!

精彩推荐:

R语言绘制散点图geom_point
R语言添加拟合曲线geom_smooth
R语言箱线图boxplot
R语言线图geom_line

你可能感兴趣的:(如何在R里面画一个动态图形之:gganimate 让你的统计图动起来!)