lattice 在使用之前,需要先載入lattice包。lattice包提供了大量新的繪圖類型、默認顏色、圖形排版等優化。同時,它還支持「條件多框圖」—— 如下圖,在不同月份(Month),觀察臭氧濃度(Ozone)與氣溫(Temp)之間的關係。這裡,「月份」就是我們所說的條件,條件多框圖可以讓我們更清楚地看到Ozone與Temp的關係是否受月份的影響而發生變化。library(lattice)
xyplot(Temp ~ Ozone |factor(Month),
data = airquality,
main="Temp(F) vs Ozone(ppb) by Month",
layout=c(5,1))
ggplot2 ggplot2由Hadley Wickham根據Grammar of Graphics(圖形的語法)中提出的理論而開發。它將繪圖視為一種映射,即從數學空間映射到圖形元素空間。它的繪圖方式類似於我們平時生活中畫圖,先創建一個畫布,然後一層層往上疊加信息。ggplot2是R中最常用到同時也是功能最強大的繪圖包(Python中也有了ggplot2的實現——plotnine,你只需要對R語言中的ggplot2代碼稍作修改,就能直接在Python中運行)。我們用ggplot2中自帶的數據diamonds為例來描述繪圖過程:繪製鑽石克拉數(carat)與價格(price)的關係,同時將純度(clarity)作為顏色變數。在代碼中,carat, price, clarity分別被映射到了x軸,軸y及color。
library(ggplot2)
ggplot(data=diamonds, mappings=aes(x=carat, y=price))+
geom_point(aes(color=clarity))
如果我們想在圖中增添統計變換,如兩變數關係的平滑曲線,僅需增加一行代碼ggplot(data=diamonds, mappings=aes(x=carat, y=price))+
geom_point(aes(color=clarity))+stat_smooth()
同樣的,如果我們想分析在不同切工(cut)下克拉數與價格的關係(類似於lattice中的條件多框圖),也是一行代碼的工作量ggplot(data=diamonds, mappings=aes(x=carat, y=price))+
geom_point(aes(color=clarity))+
stat_smooth()+facet_wrap(~cut)
ggplo2的基本概念有:
數據(data)和映射(mapping)
幾何對象(geometric)
標度(scale)
統計變換(statistics)
坐標系統(coordinate)
分面(facet)
使用ggplot2繪圖的過程就是選擇合適的幾何對象、圖形屬性、標度、統計變換、坐標系統和分面等來充分展現數據中所含有的信息的過程。ggplot2的強大之處就在於它的靈活性,通過不同圖層的疊加可以做出非常有意思的圖形。
R Graph Gallery 除了上述提到的三個常用繪圖包,R還有很多其他圖形繪製的工具,如繪製3D圖形的plot3d,rgl,繪製地圖的ggmap,leaflet,互動式可視化plotly等等。在這裡,我們介紹一個神奇的網站 THE R GRAPH GALLERY (https://www. r-graph-gallery.com )。這個網站為我們提供了平時常用的8大類46種共計數146個(日期:2019-05-13)可視化樣例及代碼,及他們使用的工具包。
例如,點擊Sankey diagram(倒數第二行最後一個)的圖標,會進入如下的界面。可以看到NetworkD3這個包能用來繪製Sankey圖。
點擊圖形下的鏈接,網站會給出該圖形的詳細信息及實現的代碼
THE R GRAPH GALLERY 網站不僅提供各類統計圖形的R的實現方式,同時也在收錄相對應的Python的實現,是學習可視化非常好的資源。
R Shiny 在我們的分析工作中,有時不僅要展示模型結果,還需要把分析歷程展示給聽眾;同時,聽眾也希望能夠參與到分析探索中來。這就需要我們將不同部分的分析 —— 如數據探索,模型構建及評估的過程整合到一起,同時增添可交互性。Shiny (http:// shiny.rstudio.com/ )是由RStudio開發的一個開源的 R 包,它為使用 R 構建 Web 應用提供了一個有力的 Web 框架。使用Shiny,我們可以用R語言輕鬆開發互動式web應用。在Shiny的官網上給出了一些App的應用案例:
我們通過官網上Kmeans example的例子(Demo)來看一看Shiny App的基本功能。這個例子中用的是R自帶的鳶尾花(iris)數據,用過R(或者Python)的朋友應該對這個數據非常熟悉。數據里包含了花萼長度(Sepal.Length),花萼寬度(Sepal.Width),花瓣長度(Pepal. Length),花瓣寬度(Pepal.Width)及花的品種(Species)信息。
在Demo中假設品種未知,通過其它變數將鳶尾花樣本分群。默認選項是將樣本按照Sepal.Length和 Sepal.Width分成3群。
通過Demo左側的工具欄,我們可以選擇不同的分群變數(Pepal. Length,Pepal.Width)及分群個數(2),來觀察不同的分群效果
實現這樣一個Shiny App的需要兩部分腳本:用戶交互(shinyUI)及伺服器(shinyServer)腳本。
shinyUI部分控制頁面的布置和展示。一方面,在這裡可以定義一系列的小工具,如滑動條(sliderInput),選項卡(radioButtons),輸入框(numericInput)等來接收用戶傳入的參數,儲存在input變數里。另一方面,它接收shinyServer傳來的output變數,並根據用戶的定義把它展示在前端。
shinyServer生成所要展示的結果。它從shinyUI讀取input變數,將其作為參數進行模型計算或圖形繪製,然後將結果儲存在output變數里,傳給shinyUI前端。
總結來說,shinyUI用於根據用戶的輸入生成input,同時展示output結果,shinyServer接收input參數,計算生成output。有興趣的朋友可以在Shiny的官網找到詳細的培訓教程。
總結
在本文,我們介紹了一些R的常用繪圖包以及學習資源:graphics通常用於快速基本的分析繪圖,個性化的圖形建議使用ggplot2來實現。R Graph Gallery從需求出發,歸納總結了各類圖形的使用案例。而Shiny整合前面的所有,生成可互動式的dashboard。這些都是工具,而作為數據科學家,我們要做的就是利用這些工具讓數據「說話」。
Reference
BBC Visual and Data Journalism cookbook for R graphics https:// bbc.github.io/rcookbook /
Paul Murrell(2011)R Graphics Second Edition
ggplot2 Reference https:// ggplot2.tidyverse.org/r eference/
THE R GRAPH GALLERY https://www. r-graph-gallery.com
Shiny http:// shiny.rstudio.com
推薦閱讀: