想必大家在听一些人用PPT汇报工作时,会被他们做的酷炫多彩的排版所吸引,其实这些东西只要你用心学习,就会发现其实并不难。今天小编就来给大家介绍一款可以秀翻全场的gif动图,让你也感受到来自领导赞许的目光。
本期小编不再拘于以往的形式,今天咱们不讲生信套路,也不谈生物学知识,介绍一个更鲜活的小技巧,教大家如何基于自己的统计数据制作gif动图。
小编在之前以为动画之类的东西只能靠FLASH、Actionscript、Python等专门制作动画的编程语言加上一些后期加工制作而成,而今天介绍的这款R包--gganimate,可以轻松帮你做出多彩的动图,而且可以做到基于自己获得的临床数据或者其它统计数据来制作,大家快来一起学习呀。
为了方便大家自己尝试这些分析流程,小编下面就使用它的示例数据进行演示。
#install.packages('gganimate')
library(ggplot2)
library(gganimate)
theme_set(theme_bw())
#加载示例数据
library(gapminder)
head(gapminder)
## # A tibble: 6 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 779.
## 2 Afghanistan Asia 1957 30.3 9240934 821.
## 3 Afghanistan Asia 1962 32.0 10267083 853.
## 4 Afghanistan Asia 1967 34.0 11537966 836.
## 5 Afghanistan Asia 1972 36.1 13079460 740.
## 6 Afghanistan Asia 1977 38.4 14880372 786.
#常规图绘制
p <- ggplot(gapminder, aes(x = gdpPercap, y=lifeExp, size = pop, colour = country)) +
geom_point(show.legend = FALSE, alpha = 0.7) +
scale_color_viridis_d() +
scale_size(range = c(2, 12)) +
scale_x_log10() +labs(x = "GDP per capita", y = "Life expectancy")
p
这是一张常规的可视化统计图,下面我们就让它动起来!
#只需下面一行代码即可实现随着时间的变化,各观测值的趋势情况。
p + transition_time(year) +labs(title = "Year: {frame_time}")
#当然还可以分开显示
p + facet_wrap(~continent) +transition_time(year) +labs(title = "Year: {frame_time}")
如果你觉得这样还不够炫酷,我们还可以做到让坐标一同抖动起来!
p + transition_time(year) +labs(title = "Year: {frame_time}") +view_follow(fixed_y = TRUE)
当然,我们还可以根据需要改变点的形状,至于下面这个像什么大家请忽略。
p + transition_time(year) +labs(title = "Year: {frame_time}") +shadow_wake(wake_length = 0.1, alpha = FALSE)
其实上面几种图的形式虽然好看,但是并不是很直观,如果想展示数据随着时间的变化趋势,还非得归折线图莫属,下面就来展示一下折线图的画法。
#先画一个静态的折线图
p <- ggplot(airquality,aes(Day, Temp, group = Month, color = factor(Month))) +
geom_line() +scale_color_viridis_d() +labs(x = "Day of Month", y = "Temperature") +
theme(legend.position = "top")
p
这样看来是乱糟糟的,没有任何逻辑性可言,那我们让它动起来看看效果吧!!
p + transition_reveal(Day)
这样就能直观的观察到各个分组的数据变化情况,但是好像缺少个方向感,我们可以通过给它们一个“火车头”,带着后面的数据来更直观的观察各组数据的变化趋势。
p + geom_point() + transition_reveal(Day)
此外,我们知道人的眼睛存在视觉后像。后像是一个视觉生理现象,其在视觉刺激停止后的形象感觉并不立刻消失,而是逐渐减弱,即形象感觉有一种残留现象。如果能在单位坐标上打上一个节点,这种效果就会更佳。
p + geom_point(aes(group = seq_along(Day))) +transition_reveal(Day)
当然,说到统计图,怎么能少的了最经典的柱状图呢,下面我们让它也动起来呀!!
library(dplyr)
mean.temp <- airquality %>%
group_by(Month) %>%
summarise(Temp = mean(Temp))
mean.temp
#先制作一个静态图
p <- ggplot(mean.temp, aes(Month, Temp, fill = Temp)) +
geom_col() +scale_fill_distiller(palette = "Reds", direction = 1) +
theme_minimal() +theme(panel.grid = element_blank(),
panel.grid.major.y = element_line(color = "white"),
panel.ontop = TRUE)
p
#让后让它动起来
p + transition_states(Month, wrap = FALSE) +shadow_mark()
最后的效果是这样的:
好啦,图到这就画完了,下面我们来介绍一下它们的应用场景。
好了,图都画出来了,好看是好看,究竟有怎样的应用场景呢?
首先,这个R包画出来的gif动图是直接可以保存的,而且无论放在PPT还是网页中都是可以直接使用的。我们在进行组会或者工作汇报时可以把基于我们自己的数据做出来的动图放到PPT中,用它们来展示我们的结果,这样会更形象生动,更加吸引观众的眼球。
特别是我们在进行展示多组数据,持续很长时间的描述性统计学数据中,在以往的图表中,我们很难在很长的时间点中动态观察各变量随着时间推移的变化趋势。而如果将它们动态化,无论是抖动点图还是折线图,我们都可以更直观的观察到我们关注的变量随着时间变化的趋势;此外,我们还可以进行对比其它组的变量来评估我们关注的变量的不同之处,特别是更方便找出在中间某一段时间的不同变化趋势。
最后展示的柱状图除了上述所说的应用场景外,还可以在数据量十分庞大的情况使用,我们可以通过观察由每条柱子顶点中心构成的曲线下面积,推断出我们研究的数据属于正态分布,泊松分布,还是其它统计模型,从而使用合适的统计学分析算法。
如今是一个多媒体的时代,人们不再需要为温饱问题而烦恼,更多的是利用现代工具来更高效的创造价值。如何为别人更好的展示自己做的工作是体现自身价值的有力手段,同样的一份工作汇报,不同的人可以汇报出不一样的效果,同样的,听众也可能得到不一样的结论。
特别是在短时间内介绍一份工作,能做到持续抓住观众的眼球就成功了一多半,剩下的就是讲者的口述能力了。而相较于只有通过长期积累出的、只能临场发挥的口述能力,我们可以做更多更细致的前期准备工作来弥补自己的口述能力的不足。今天小编介绍的这个小技巧,正是我们可以在工作汇报前可以做的准备工作之一,而且只要有一点R语言基础的都可以制作,大家赶紧实操起吧。