R语言数据分析及可视化

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

2021-11-02  本文已影响0人  R语言搬运工

\color{blue}{此文内容首发于微信公众号:R语言搬运工,关注公众号浏览更多精彩内容}

\color{red}{交流分享扣扣群:925920448}

--原文链接--

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: 随着数据进行梯度展示

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

\color{red}{▉ } \color{blue}{动态的点图(transition_time())}

使用包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

\color{red}{▉ } \color{blue}{ 动态的点图(transition_states())}

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

原始点分布图如下:

ggplot(iris, aes(Petal.Length, Petal.Width, colour = Species)) +
  geom_point(show.legend = F)
image.png
\color{red}{1. view_zoom 添加动画效果图:}
plot7.gif
\color{red}{2. 使用参数pan_zoom=-3 换一下缩放的比例,效果如下:}
plot8.gif
\color{red}{ 3. 可以加view_step函数让点自己一步一步的移动,如下图:}
plot9.gif
\color{red}{4. 当不添加颜色分组时,效果如下:}
plot10.gif
\color{red}{5. 改变参数pause_first = TRUE, 使画面中一直出现点:}
plot11.gif
\color{red}{6. 改变参数wrap = FALSE:最后进行缩放}
plot12.gif
\color{red}{7. view_follow()函数的动态效果:} plot13.gif

\color{red}{8. 固定X轴不缩放:}

plot14.gif
\color{red}{9. 或者设置X轴在0到4,和Y轴在0到2的范围内不缩放:}
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
  <int> <dbl> <chr>
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
\color{red}{1. 使用transition_states()函数加个动态:}
plot16.gif

\color{red}{2. transition_events() 控制条形图增长方式:} \color{blue}{(获取数据可以关注公众号(R语言搬运工)后台回复“数据819”进行下载)}

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

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


image.png

使用transition_reveal()函数添加动画


plot18.gif

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

\color{blue}{此文内容首发于微信公众号:R语言搬运工,关注公众号浏览更多精彩内容}

\color{red}{交流分享扣扣群:925920448}

精彩推荐:

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

上一篇下一篇

猜你喜欢

热点阅读