第一篇:R語言資料視覺化概述(基於ggplot2)

穆晨發表於2016-03-15

前言

        ggplot2是R語言最為強大的作圖軟體包,強於其自成一派的資料視覺化理念。當熟悉了ggplot2的基本套路後,資料視覺化工作將變得非常輕鬆而有條理。

        本文主要對ggplot2的視覺化理念及開發套路做一個總體介紹,具體繪圖方法(如折線圖,柱狀圖,箱線圖等)將在後面的文章中分別進行講解。

核心理念

        1. 將資料,資料相關繪圖,資料無關繪圖分離

        這點可以說是ggplot2最為吸引人的一點。眾所周知,資料視覺化就是將我們從資料中探索的資訊與圖形要素對應起來的過程。

        ggplot2將資料,資料到圖形要素的對映,以及和資料無關的圖形要素繪製分離,有點類似java的MVC框架思想。這讓ggplot2的使用者能清楚分明的感受到一張資料分析圖真正的組成部分,有針對性的進行開發,調整。

        2. 圖層式的開發邏輯

        在ggplot2中,圖形的繪製是一個個圖層新增上去的。舉個例子來說,我們首先決定探索一下身高與體重之間的關係;然後畫了一個簡單的散點圖;然後決定最好區分性別,圖中點的色彩對應於不同的性別;然後決定最好區分地區,拆成東中西三幅小圖;最後決定加入迴歸直線,直觀地看出趨勢。這是一個層層推進的結構過程,在每一個推進中,都有額外的資訊被加入進來。在使用ggplot2的過程中,上述的每一步都是一個圖層,並能夠疊加到上一步並視覺化展示出來。

        3. 各種圖形要素的自由組合

        由於ggplot2的圖層式開發邏輯,我們可以自由組合各種圖形要素,充分自由發揮想象力。

基本開發步驟

       

        1. 初始化 - ggplot()

        這一步需要設定的是圖的x軸,y軸和"美學特徵"。基本形式如下:

p <- ggplot(data = , aes(x = , y = ))

        這一步裡,設定x軸和設定y軸很好理解。那麼"美學特徵"又是什麼呢?

        舉個例子來說,下面這張散點圖裡,x軸表示年齡,y軸表示身高,很好理解:

        但這張圖除了展示年齡和身高的關係,還展示出每個樣本點的體重:顏色越深表示體重越大。因此體重資訊和年齡身高一樣,也需要繫結到一個具體的列。這一列就是散點圖中的"美學特徵"。

        來看看R語言繪製程式碼:

ggplot(heightweight, aes(x=ageYear, y=heightIn, colour=weightLb))+geom_point()

        其中的colour引數就是該圖的"美學特徵"。

        再比如,下面這張柱狀圖中,x軸表示日期,y軸表示權重,很好理解:

        但這張圖中每個日期對應了兩個不同的權重並採用兩個柱狀來對比,那麼這個劃分依據也是另一個“美學特徵”。

        再看看繪製程式碼:

ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar))+geom_bar(position="dodge", stat="identity")

        其中的fill引數就是該圖的"美學特徵"。

        綜上所述,圖中的每個樣本點除了通過它的座標位置,還可以以其他形式展示資訊,比如大小,色深,分組等。而這些新形式需要繫結的列,便叫做"美學特徵"。

        "美學特徵"的形式和x,y軸一樣是以列的形式給出,且列中元素個數和x,y軸列必然相等。它的設定也和x,y軸一樣在ggplot()函式的aes引數括號內進行。

        2.  繪製圖層 - geom_bar()/geom_line()等等

        上一步的主要工作是為資料視覺化配置好了資料,接下來便可根據業務的需要來繪製不同的圖,如折線圖/柱狀圖/散點圖等等。具體的實現方法在後面的文章中會細緻講解,這裡重點提一下繪圖函式裡的stat引數。這個引數是表示對樣本點做統計的方式,預設為identity,表示一個x對應一個y,同時還可以是bin,表示一個x對應落到該x的樣本數。

        3. 調整資料相關圖形元素 - scale系列函式、某些專有函式

        在ggplot2中,scale標尺機制專門負責完成資料到影象元素的對映。也許你會問,"美學特徵"不是已經定義好了這個對映嗎?然而事實是"美學特徵"只是選定了對映前的資料,並沒有說明具體對映到什麼圖形元素。

        舉個例子,假如某張表記錄了不同種類水池的長,寬,深資訊。現在需要繪製不同種類下水池長和寬關係的柱狀圖,那麼初始化完成的是這個對映:

       

        而scale函式完成的是這個對映:

       

        顯然a對映為了紅色,b對映為了藍色。

        也許你還會問,我的程式碼不用scale,那麼對映是如何完成的呢?答曰系統有預設對映的,就像繪圖函式都有預設引數stat=identity這樣。

        4. 調整資料無關圖形元素 - theme()、某些專有函式

        這部分包括設定圖片標題格式,文字字型這類和資料本身無關的影象元素。只需呼叫theme()函式或者某些專有函式(如annovate函式可為圖片新增註釋)便可實現。

        一個圖層繪製好後便可觀察調整,然後開始下一個圖層的製作,直到整幅圖繪製完畢。

小結

        本文作為該系列部落格的開篇,從總體、抽象的角度介紹了R語言的資料視覺化包ggplot2。讀者如果覺得有些概念抽象難以理解,不必糾結,待看完該系列其他文章後再回過頭來看本文,相信會有新的收穫。

        接下來的文章將從具體、細緻的角度講解如何使用R語言的ggplot2軟體包進行各種資料視覺化。

        最後,欣賞一些使用ggplot2製作的成品圖吧:

       

相關文章