是時候 關注 我們一波了
在上一次的推文中,我們已經介紹了很多應用廣泛的圖形。它們主要用于展示單類别型或連續型變量的分布情況。這一次,我們來讨論一下怎麼利用圖形展示雙變量間關系(二進制關系)和多變量間關系(多元關系)。展示變量關系的圖形有很多,我們今天就主要介紹幾種。
本篇教程,内容十分豐富,雖然是單篇,大家務必多多練習,可以充當一周的學習内容,靜下心來慢慢吸收。
溫馨提示
1、本節内容重點内容較多,
務必緊跟紅色标記。
2、測試資料及代碼
見文末客服小姐姐二維碼。

散點圖-拟合曲線
散點圖可用來描述兩個連續型變量間的關系。這裡以R中自帶的mtcars資料為例繪制第一個示例圖。為了展示圖中兩個變量的關系,我們加上了兩條拟合曲線,分别來自于函數 lm() 和函數 lowess()。
圖1,散點圖示例1
繪制散點圖的基礎函數為 plot()。函數 abline()、lines() 可以在圖中添加拟合曲線。R中也提供了一些比 plot() 更強大的函數,比如 包car 中的 scatterplot()函數,感興趣的同學可以自己嘗試一下這個函數。

散點圖矩陣
一個散點圖可以展示兩個變量之間的關系,如果有多個變量呢?散點圖矩陣可以解決這個問題。散點圖矩陣對應的函數是 pairs(),圖2 就是一個很好的例子。
圖2:散點圖矩陣示例
在上圖中,對角線上的變量名說明了每幅圖形對應的兩個變量。同時,不難發現,對角線上下的圖形是相同的,可以通過參數 upper.panel = NULL 來控制隻生成下三角的圖形。同樣的,在 包car 中也有函數 scatterplotMatrix() 可以繪制散點圖矩陣。下面給出了一個例子。
圖3:函數scatterplotMatrix()的例子。
可以看到上圖中預設為散點圖添加了拟合曲線,代碼中的參數可以控制曲線為虛線或實線。
建立散點圖矩陣的函數很多,比如:
- glus包 中的 cpars() 函數
- TeachingDemos包 中的 pairs2() 函數
- HH包 中的xysplom() 函數
- ResourceSelection包 中 的 kepairs() 函數
- SMPracticals包 中的 pairs.mod() 函數。
每個函數都加入了自己獨特的曲線。散點圖矩陣作為一種簡單清晰的圖形,可以說是資料分析與展示工作中必備的工具了。

密度散點圖
散點圖固然直覺,但也不是完美的,在大資料時代,散點圖就顯得力不從心了。比如,10,000個觀測點的案例中的散點圖是這樣的。
圖4:10000個資料點的散點圖
烏壓壓的一片,啥也看不到~ 這種情況下,高密度散點圖可以幫我們解決困難。比如函數 smoothScatter()。
圖5:高密度散點圖
雖然丢失了一些細節,但可以完整的展示整體上兩個變量之間的關系。上面的圖形當然也有其他的函數可以繪制,比如 hexbin包 中的 hexbin() 函數。那散點圖矩陣有沒有對應大資料集的解決方案呢?答案是肯定的,比如函數smoothScatter() 以及 IDPmisc包 中的函數 ipairs()。大家不妨自己對照幫助文檔動手試一試。

三維散點圖
在二維坐标系中的散點圖可以展示二進制變量關系,那三維坐标系一定可以展示三元變量關系了。但是,人們對于三維散點圖的觀測能力是遠不如二維散點圖的。下面是一個簡單的三維散點圖的例子(可用scatterplot3d包中的 scatterplot3d()函數來繪制它們的關系)。
圖6:三維散點圖
這裡就不展開講更多三維散點圖的函數了。大家感興趣的話,可以自己嘗試一下rgl包中的plot3d()、car包中函數scatter3d()等等。

氣泡圖
相信接觸過功能富集之類分析工作的同學對氣泡圖不會陌生。這是另一種展示三個變量間的關系的方法。可用symbols()函數來建立氣泡圖。下面是一個氣泡圖的示例。
圖7.氣泡圖
其實,氣泡圖是一種特殊的散點圖,通過先建立一個二維散點圖,然後用點的大小來代表第三個變量的值,在某些分析工作中還是比較常見的。
散點圖很多時候能幫我們發現資料中隐藏的一些關系,但如果要觀察某個變量的變化趨勢,折線圖會是更好的選擇。繪制折線圖的主要函數包括了plot(),lines()。兩者的主要差別在于lines()并不自己生成圖形,而是在已有圖形上添加資訊。兩個函數中控制生成圖形的參數為type。參數type的選項如下:
圖8:參數type

相關圖
下面有一個很好的例子為大家展示折線圖的功能和繪制方法。
折線圖和散點圖中的變量關系都隻能靠我們自己定性判斷,如果要得到定量的相關關系,該怎麼辦?相關圖可以解決這個問題,下面是一個簡單的例子,主要用到的函數為corrgram()。由于我們還沒接觸到R中的資料分析,這個圖形的具體含義就不給大家解釋了,在緊接着的幾次講完統計分析之後,再給大家補充這部分内容。
圖10:相關圖示例

馬賽克圖
最後給大家介紹一種不太常見的圖形——馬賽克圖。這種圖形當然不是為了給資料打馬賽克,它的功能是展示多個類别型變量之間的關系。回顧之前學過的圖形,折線圖和散點圖可以展示連續型變量間關系的方法,單個類别型變量可以用柱狀圖或者餅圖展示,那麼馬賽克圖就解決了它們解決不了的問題。
在馬賽克圖中,嵌套矩形面積正比于單元格頻率, 其中該頻率即多元列聯表中的頻率。顔色和/或陰影可表示拟合模型的殘內插補點。vcd包中的mosaic()函數可以繪制馬賽克圖。(R基礎安裝中的mosaicplot()也可繪制馬 賽克圖,但還是推薦vcd包,因為它具有更多擴充功能。)下圖為例。
圖11:馬賽克圖示例
上圖中,以R中自帶的Titanic資料集為例,它包含存活或者死亡的乘客數、乘客的船艙等級(一等、二等、三等和船員)、性别(男性、 女性),以及年齡層(兒童、成人)等資訊。這是一個被充分研究過的資料集。觀察圖形可以得到大量的資料資訊。大家可以通過代碼ftable(Titanic)得到更多詳細資訊。
本節小結
到這裡,專門講解圖形繪制的内容基本結束,相信大家已經掌握了大部分基本圖形的繪制技巧。後面我們就要開始統計分析部分的内容,中間肯定也會包含一些圖形的繪制(比如前面的相關圖),相信所有内容結束之後,大家都會是繪圖小能手了!
最後,為了友善大家學習,本次推文中所有圖形的資料都來自R自帶或者R中函數包自帶,圖形及相關代碼免費奉送~~可以通過聯系文末客服小姐姐獲得。
線下課程熱烈報名中,想學R語言看過來
從R語言入手學習生物資訊與資料挖掘
講師簡介
上海交通大學碩士,MIT博士,長期從事醫學與生物資訊學研究,主要研究方向為高通量測序在惡性良性腫瘤早期篩查和無創産前診斷中的臨床應用,獨立開發多個資料分析軟體并發表相關文章(影響因子≥5分6篇,≥10分2篇),熟知R、Python、Perl及C語言等多種程式設計語言及程式設計,曾累計書寫R代碼超過5萬餘行。
下期推文預告
基本統計分析
本期幹貨
R語言Day9-進階統計繪圖代碼
原文詳情:“科研貓”公衆号,
科研貓原創系列,未經許可嚴禁轉載
版權事宜由上海辰明律師事務所提供法務支援。