想必大家在聽一些人用PPT匯報(bào)工作時(shí),會(huì)被他們做的酷炫多彩的排版所吸引,其實(shí)這些東西只要你用心學(xué)習(xí),就會(huì)發(fā)現(xiàn)其實(shí)并不難。今天小編就來給大家介紹一款可以秀翻全場的gif動(dòng)圖,讓你也感受到來自領(lǐng)導(dǎo)贊許的目光。
本期小編不再拘于以往的形式,今天咱們不講生信套路,也不談生物學(xué)知識(shí),介紹一個(gè)更鮮活的小技巧,教大家如何基于自己的統(tǒng)計(jì)數(shù)據(jù)制作gif動(dòng)圖。
小編在之前以為動(dòng)畫之類的東西只能靠FLASH、Actionscript、Python等專門制作動(dòng)畫的編程語言加上一些后期加工制作而成,而今天介紹的這款R包--gganimate,可以輕松幫你做出多彩的動(dòng)圖,而且可以做到基于自己獲得的臨床數(shù)據(jù)或者其它統(tǒng)計(jì)數(shù)據(jù)來制作,大家快來一起學(xué)習(xí)呀。
為了方便大家自己嘗試這些分析流程,小編下面就使用它的示例數(shù)據(jù)進(jìn)行演示。
#install.packages('gganimate')
library(ggplot2)
library(gganimate)
theme_set(theme_bw())
?
#加載示例數(shù)據(jù)
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.
?
#常規(guī)圖繪制
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

這是一張常規(guī)的可視化統(tǒng)計(jì)圖,下面我們就讓它動(dòng)起來!
#只需下面一行代碼即可實(shí)現(xiàn)隨著時(shí)間的變化,各觀測(cè)值的趨勢(shì)情況。
p + transition_time(year) +labs(title = "Year: {frame_time}")

#當(dāng)然還可以分開顯示
p + facet_wrap(~continent) +transition_time(year) +labs(title = "Year: {frame_time}")

如果你覺得這樣還不夠炫酷,我們還可以做到讓坐標(biāo)一同抖動(dòng)起來!
p + transition_time(year) +labs(title = "Year: {frame_time}") +view_follow(fixed_y = TRUE)

當(dāng)然,我們還可以根據(jù)需要改變點(diǎn)的形狀,至于下面這個(gè)像什么大家請(qǐng)忽略。
p + transition_time(year) +labs(title = "Year: {frame_time}") +shadow_wake(wake_length = 0.1, alpha = FALSE)

其實(shí)上面幾種圖的形式雖然好看,但是并不是很直觀,如果想展示數(shù)據(jù)隨著時(shí)間的變化趨勢(shì),還非得歸折線圖莫屬,下面就來展示一下折線圖的畫法。
#先畫一個(gè)靜態(tài)的折線圖
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

這樣看來是亂糟糟的,沒有任何邏輯性可言,那我們讓它動(dòng)起來看看效果吧!!
p + transition_reveal(Day)

這樣就能直觀的觀察到各個(gè)分組的數(shù)據(jù)變化情況,但是好像缺少個(gè)方向感,我們可以通過給它們一個(gè)“火車頭”,帶著后面的數(shù)據(jù)來更直觀的觀察各組數(shù)據(jù)的變化趨勢(shì)。
p + geom_point() + transition_reveal(Day)

此外,我們知道人的眼睛存在視覺后像。后像是一個(gè)視覺生理現(xiàn)象,其在視覺刺激停止后的形象感覺并不立刻消失,而是逐漸減弱,即形象感覺有一種殘留現(xiàn)象。如果能在單位坐標(biāo)上打上一個(gè)節(jié)點(diǎn),這種效果就會(huì)更佳。
p + geom_point(aes(group = seq_along(Day))) +transition_reveal(Day)

當(dāng)然,說到統(tǒng)計(jì)圖,怎么能少的了最經(jīng)典的柱狀圖呢,下面我們讓它也動(dòng)起來呀!!
library(dplyr)
mean.temp <- airquality %>%
group_by(Month) %>%
summarise(Temp = mean(Temp))
mean.temp
?
#先制作一個(gè)靜態(tài)圖
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
?
#讓后讓它動(dòng)起來
p + transition_states(Month, wrap = FALSE) +shadow_mark()
最后的效果是這樣的:

好啦,圖到這就畫完了,下面我們來介紹一下它們的應(yīng)用場景。
好了,圖都畫出來了,好看是好看,究竟有怎樣的應(yīng)用場景呢?
首先,這個(gè)R包畫出來的gif動(dòng)圖是直接可以保存的,而且無論放在PPT還是網(wǎng)頁中都是可以直接使用的。我們?cè)谶M(jìn)行組會(huì)或者工作匯報(bào)時(shí)可以把基于我們自己的數(shù)據(jù)做出來的動(dòng)圖放到PPT中,用它們來展示我們的結(jié)果,這樣會(huì)更形象生動(dòng),更加吸引觀眾的眼球。
特別是我們?cè)谶M(jìn)行展示多組數(shù)據(jù),持續(xù)很長時(shí)間的描述性統(tǒng)計(jì)學(xué)數(shù)據(jù)中,在以往的圖表中,我們很難在很長的時(shí)間點(diǎn)中動(dòng)態(tài)觀察各變量隨著時(shí)間推移的變化趨勢(shì)。而如果將它們動(dòng)態(tài)化,無論是抖動(dòng)點(diǎn)圖還是折線圖,我們都可以更直觀的觀察到我們關(guān)注的變量隨著時(shí)間變化的趨勢(shì);此外,我們還可以進(jìn)行對(duì)比其它組的變量來評(píng)估我們關(guān)注的變量的不同之處,特別是更方便找出在中間某一段時(shí)間的不同變化趨勢(shì)。
最后展示的柱狀圖除了上述所說的應(yīng)用場景外,還可以在數(shù)據(jù)量十分龐大的情況使用,我們可以通過觀察由每條柱子頂點(diǎn)中心構(gòu)成的曲線下面積,推斷出我們研究的數(shù)據(jù)屬于正態(tài)分布,泊松分布,還是其它統(tǒng)計(jì)模型,從而使用合適的統(tǒng)計(jì)學(xué)分析算法。
如今是一個(gè)多媒體的時(shí)代,人們不再需要為溫飽問題而煩惱,更多的是利用現(xiàn)代工具來更高效的創(chuàng)造價(jià)值。如何為別人更好的展示自己做的工作是體現(xiàn)自身價(jià)值的有力手段,同樣的一份工作匯報(bào),不同的人可以匯報(bào)出不一樣的效果,同樣的,聽眾也可能得到不一樣的結(jié)論。
特別是在短時(shí)間內(nèi)介紹一份工作,能做到持續(xù)抓住觀眾的眼球就成功了一多半,剩下的就是講者的口述能力了。而相較于只有通過長期積累出的、只能臨場發(fā)揮的口述能力,我們可以做更多更細(xì)致的前期準(zhǔn)備工作來彌補(bǔ)自己的口述能力的不足。今天小編介紹的這個(gè)小技巧,正是我們可以在工作匯報(bào)前可以做的準(zhǔn)備工作之一,而且只要有一點(diǎn)R語言基礎(chǔ)的都可以制作,大家趕緊實(shí)操起吧。