想必大家在聽一些人用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語言基礎的都可以制作,大家趕緊實操起吧。