R的基礎及進階資料視覺化功能包介紹

轉自 数据派THU

R 作為入門級程式語言,被經常運用在資料整理、資料視覺化、以及機器學習中。

本篇文章將主要介紹在R中如何視覺化資料 (基礎+進階)。

R繪圖的原理

使用R繪圖,我們需要在腦海中明確幾個必要元素。首先,需要有一張空白的畫布, 如下圖所示。其次,我們需要根據資料確定X軸、Y軸,以及X軸Y軸的取值範圍,因為一個平面直角座標系在R繪圖過程中是必不可少的。接下來,我們就可以選擇適當的圖表型別(折線圖、柱狀圖、點狀圖等),並根據資料座標在座標系中描繪資料。最後,我們還可以在畫布上新增額外資訊,例如圖表名稱,圖例等,當然我們也可以根據需求使每個資料點在圖表中呈現不同的顏色和形狀、並排繪製多個圖表等。

在擁有空白畫布的基礎上,我們可以使用R自帶的視覺化功能語句plot()來描繪散點圖、折線圖、柱狀圖等,輔助使用者用於觀察整個資料集的潛在趨勢。

根據R繪圖原理,使用如上語句,我們首先在空白的畫布上描繪出了我們提到的第一個元素,平面直角座標系

在R語言裡,圖表的繪製我們都可以使用程式設計,將一個任務(一個圖表)拆分成若干個子任務(前文提到的,圖表中的若干元素),然後疊加或擴充子任務(疊加元素來形成圖表)來實現繪圖。R plot()也是如此。

在擁有座標系的基礎上,我們便可以描繪資料點,注意此處預設圖表型別是點狀圖。

在plot()語句括號中,逗號前我們定義了資料點的X軸座標值,逗號後定義了對應資料點的Y軸座標值,兩個都是用陣列的方式表達。因此如下plot()語句定義了5個數據點,分別是(1,3),(2,5),(3,8),(4,9),(5,13)。

根據R繪圖原理,在已經擁有資料點的基礎上,我們可以透過擴充了plot()語句來定義圖表的其他元素。我們把圖表型別從點狀圖改變為折線圖,即在plot()語句中,我們加入一個逗號,在逗號後定義 type =”l” 。

參考:type的取值及定義

根據不同的資料集及需求我們可以繪製更為複雜的視覺化圖表。

例如像我們提到的,視覺化圖表中的散點顏色,大小,以及形狀都可以透過擴充plot()中的元素改變。

在原點狀圖基礎上,我們定義了散點的大小(cex=4), 散點形狀(pch=11)以及散點顏色(col=”green”)

參考:pch所有的引數定義。

在更為複雜的圖表中,我們可以疊加執行若干子元素語句來完成任務。在Figure 4基礎上,我們可以使用text() 在特定的座標增加文字。下圖程式碼中,text(3,12, “This is text”) 表示在座標點(3,12)插入“This is text”。

和text()同理, legend() 語句可對圖表呈現方式進行標註方便理解, lines() 語句允許我們在散點圖的基礎上加入折線圖並且調整折線的粗細、長短、型別。這些語句都可以被靈活使用,使視覺化圖表在原有基礎上達到更理想的效果。

R資料視覺化工具

在R語言裡,除了R自帶的視覺化工具plot(),還有很多精彩的工具包,比如ggplot2, 以及gganimate。

ggplot2

ggplot2 是R中被廣泛應用的繪圖包。與R plot()的基本作圖系統相比,ggplot2旨在運用簡單的程式語言繪製及美化資料視覺化圖表。我們將使用R Studio中自帶的資料集mpg來進行ggplot2視覺化演示根據R繪圖原理,我們需要在ggplot2中將一個圖表拆分成若干個子元素並進行疊加繪製。不同於R plot(),我們可以將ggplot()的繪製理解為兩個步驟:首先我們先將需要的資料以及顏色等一些引數輸入ggplot()中,其次疊加geom_*()語句,來繪製指定的圖表的幾何影象型別,比如散點圖、折線圖、柱狀圖等。

參考R繪圖原理,ggplot2中我們可以將圖表拆分為如下常用元素:

1. 資料(data): 需要視覺化的資料
2. 對映(mapping): 資料中可調配的引數,如X、Y值,顏色等
3. 幾何物件(geom_*): 圖表的幾何影象型別
4. 標度(scale_*):變數以何種引數(何種顏色、形狀)對映到圖形上
5. 主題(theme_*):圖表主題設定,通常ggplot()工具包帶有一些訂製主題,方便進行圖表美化
6. 分面(facet): 根據資料種類進行拆分和分層畫圖
7. 註釋(annotate): 如plot()中的text(),進行文字標註
8. 標籤(lab): 定義標註的X、Y軸名稱,主標題、副標題等

在開始前,我們需要下載並呼叫ggplot2

注意:下載以及呼叫時工具包名稱為”ggplot2”,但宣告時,我們需要宣告ggplot()語句

在如下程式中,我們首先完成了ggplot()引數的輸入。

在這裡,我們首先聲明瞭第一個和第二個元素。data=mpg表示使用的資料集為mpg,mapping中是定義了對映到圖表X軸、Y軸的資料屬性,以及每個資料點的顏色(對映在X軸上的資料屬性是displ,Y軸是hwy,顏色則按照資料集中class的種類標註,比如:如果資料集mpg中class有三個種類:A\B\C,那麼資料的顏色標註則會按照A\B\C區分。)

注意:此時我們完成了第一個步驟:將資料以及顏色元素引數輸入ggplot()中。現在,我們沒有生成任何圖表 — — 執行此行語句只會生成一個空白畫布。

在繪完資料點後,參考plot(),在ggplot2中我們也透過使用第三個元素,geom_point()來改變幾何物件型別。

參考:geom_xxx()常用型別

Reference: ggplot2 Quick Reference: geom | Software and Programmer Efficiency Research Group (usi.ch)

http://sape.inf.usi.ch/quick-reference/ggplot2/geom

筆者常使用的包括geom_bar(), geom_line(), geom_hex(),geom_point()(分別為柱狀圖,條形圖,六邊形,散點圖)疊加生成不同的視覺化圖表。

注意:ggplot() 中每一個疊加子元素語句都需要用 “+”連線。而plot()中,我們則需要宣告一個新語句。

在原有圖表的基礎上,我們還可以給圖表進一步美化。比如,在如下語句中, 根據ggplot()常用圖表元素清單,我們疊加並擴充瞭如下子元素:

第二個元素,ggplot()的對映(mapping)中我們擴充了color = displ,它命令圖表的顏色按displ種類標註
第四個元素,scale_colour_gradient() 使我們的圖表具有了漸變的色彩
第六個元素,theme_bw()使背景帆布變成白色
第八個元素,labs(),xlab(),和ylab()則重修修訂了主題,副標題,角標,以及X、Y軸名稱。

gganimate

除了可繪製靜態圖表的功能包,R還有很多強大的功能包,其中gganimate就是筆者常用來描繪動態圖表的功能包。在ggplot2的基礎上,gganimate允許使用者定義一個變數作為每一幀變化的參照。如果透過上文,你已經對ggplot2已經有一定了解,那麼在原有的語句中新增一些簡單的指令,就可以實現圖表的動態化。

與ggplot2同理,我們需要首先下載以及呼叫gganimate。

在RStudio Console中我們可以看到,在使用gganimate之前,我們還需要安裝其他的功能包 包括gifski和 av。

與ggplot2相似,我們首先需要生成靜態圖表。

在生成靜態圖表的基礎上,動圖及為多張靜態圖按一定規則堆在了一起。這裡的規則便是我們提到的,按照宣告的變數,比如:時間或類別順序。

上述程式碼中,與ggplot2不同的是黃色劃線部分。

”title = ‘ Year: {frame_time} ’‘’代表了每一幀圖表的標題。

’frame_time’ 與最後一行transition_time(year)相對應,說明動圖的每一幀是按照year的遞增順序變化的。ease_aes(‘linear’)則規定了圖表是以一種較柔和的幅度變化的。gganimate提供了很多變化方式,可在官方文件中找到:

官方文件https://gganimate.com/

transition_*:定義資料按照哪個參變數進行“移動”
view_*(): 定義座標軸隨資料變化(即為圖表可以根據資料值範圍拉大或縮小)
shadow_*():定義資料出現的方式(存在舊資料的歷史記憶以影子的形態相繼出現)
enter_*()/exit_*():定義新資料出現和舊資料褪去的方式
ease_aes():美觀定義,控制變化的節奏

最後,看看我們的成果:

同理,動態折線圖和柱狀排名圖在gganimate中都是可以被實現的。

總結

總結一下:要在R中實現資料的視覺化繪製,首先我們便要明確R繪圖原理。很多功能包的使用,比如ggplot(), gganimate(), 其中的元素便是根據R繪圖原理,將一個宏觀的圖表進行元素拆分,並進行分別疊加宣告。另外,在繪圖時,千萬不要急於對圖表進行美觀。繪製出基本的圖表和幾何型別永遠是最首要也是最耗時的任務。因為在實際情況中,資料集往往並不如我們想象的完美,我們需要使用R語言對資料進行很多整合、清理。在基本圖表已經完美的情況下,我們才能對圖表進行美觀修飾。至於繪圖時的語法,我們只要熟悉了R繪圖原理,明白了繪圖時需要定義的元素有哪些,不論哪個工具包,就都可以手到擒來了。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~

文章推薦

10個行業專屬視覺化大屏模板免費送,如何零程式碼套用?

八個行業30個免費資料網站來源,從此不愁找資料了

職場潛規則:如何殺死一個IT技術大牛?

--

--

數據分析那些事
數據分析不是個事

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/