R語言從入門到精通:Day7
- 2019 年 10 月 6 日
- 筆記
關注
我們一波了
這次的教程的重點就是R語言中處理圖形的一般方法,包括了圖形的創建和保存、圖形特徵的修改、一些圖形處理的通用方法(後面還會重點關注特定類型的圖形)以及圖形組合的各種方法。
寫在開篇的話,本篇教程中,我們將通過測試數據帶領大家一步步繪製和美化圖形,內容較多,請務必靜下心來學習。
溫馨提示
1、本節內容重點內容較多,
務必緊跟紅色標記。
2、測試數據及程式碼
見文末客服小姐姐二維碼。

1、圖形的創建和保存
我們先來看看在R中如何創建圖形和保存圖形,下面例子稍微有點難度,只是先給大家做個示例。大家可以試一下下面的程式碼,最終結果應該如圖2所示。

圖1:示例程式碼1

圖2:示例程式碼1創建的圖形
上面的程式碼先綁定了mtcars這個數據框(不用擔心,你沒有這個數據框

),plot()打開了一個圖形窗口並繪製了一幅散點圖,abline()添加了一條最優擬合曲線,然後給圖形加上了標題並解綁數據框。
R中可以通過程式碼或者圖形介面來保存圖形,程式碼保存圖形的方法如下圖:

圖3:示例程式碼2
除了使用pdf()函數保存為pdf文件,還可以用png(),jpeg(),bmp(),tiff(),xfig()等函數保存為其他格式(建議保存為pdf文件,因為pdf是矢量圖文件,方便後續編輯修改),使用方法都比較類型就不一一列舉了。
圖形介面的保存方法相信就不用介紹了,大家只要努力在窗口裡面找到「另存為「或者「導出」或者「export」等字樣的按鈕就可以了,這裡也不給大家舉例子了。
知道怎麼創建和保存圖形之後,我們還是從一個簡單的例子出發給大家逐一介紹圖形繪製中的各個參數。

2.一個簡單的例子

圖4:示範數據
考慮上面的一組數據,描述了病人對兩種藥物A、B五個劑量水平上的響應情況。首先可以創建一幅描述dose和drugA響應關係的圖形。

圖5:示例程式碼3

圖6:dose和drugA響應關係
函數plot()是R中為對象作圖的一個非常重要的泛型函數,可以通過查看該函數的幫助文檔進一步了解它的細節參數。下面我們的重點在於如何修改圖形的外觀。
修改圖形參數有兩種方法,一種是通過函數par()來指定圖形參數實現圖形特徵的定義,另一種是直接為函數plot()或者其他高級繪圖函提供optionname=value的鍵值對。

圖7:示例程式碼4
大家可以自己試一下上面的兩種方法,看生成的圖形和圖6有什麼不一樣。
就像上面的例子展示的,圖形參數可以控制圖形的特徵,其中用於指定符號和線條類型的參數有pch,cex,lty,lwd。
參數pch用來指定繪製點時用的符號,他的值如下圖:

圖8:參數pch。
參數cex則指定了符號的大小,cex是一個數值,默認大小為1,cex=0.5時表示縮小為默認值的0.5倍。參數lty用來指定想要的線條類型,參數lwd指定了線條的寬度,默認為1,lwd=2時繪製一條兩倍於默認寬度的線條。
大家可以試一下下面這個圖是怎麼通過參數設置調整出來的(答案見文末,找胖雨小姐姐索取哦)。

圖9:大家可以試一下這個效果怎麼做出來的。
到目前為止,我們的圖形都是黑白的,為什麼不給它加上色彩呢?圖形裡面可以上色的地方很多,下表列出一些常用的「上色」參數。

表1:「上色」參數
R中指定顏色的方法很多,舉例來說,col=1、col="white"(直接用顏色的英文名)、col="#FFFFFF"(RGB的16進位顏色編碼)、col=rgb(1,1,1)和col=hsv(0,0,1) 都是表示白色的等價方式。推薦初學者就用前兩種(即通過顏色下標或者名稱指定顏色)。函數colors()可以返回所有可用顏色的名稱。給大家推家一個R中色彩的優秀圖表,參見:https://www.nceas.ucsb.edu/~frazier/RSpatialGuides/colorPaletteCheatsheet.pdf
(之前有人推薦,http://research.stowers-institute.org/efg/R/Color/Chart,這個鏈接失效了,如果有同學還有這個圖表,不妨分享給大家)。
R中的「上色」函數很多,包括rainbow()、heat.colors()、terrain.colors()、topo.colors() 以及cm.colors()。還有一些很受歡迎的「上色」函數包,比如:RColorBrewer。
圖形參數還可以指定字型大小、字體和字樣。參數cex和font分別可以控制文本的大小和字體。文本參數的設置方法和前面示例參數的設置方法大同小異,具體如下表:

表2:文本參數
圖形繪製完成之後,還有一個很重要但容易被忽視的步驟,圖形裡面要添加圖例、標註、標題等,否則誰知道你的圖形要表達的含義是什麼呢。舉例來說,下面的程式碼給圖形添加了標題,副標題,坐標軸標籤,坐標軸範圍等等。

圖10:示例程式碼5

圖11:示例程式碼5的結果
首先,可以用函數title()為圖形添加標題和坐標軸標籤。比如:
title(main="main title", sub="subtitle", xlab="x-axis label", ylab="y-axis label")
函數axis()用來創建自定義的坐標軸。
函數abline()可以用來為圖形添加參考線(後面的圖形中會有示例)。函數legend()用來添加圖例。下面是一個綜合了上面幾個函數繪製的圖形。

圖12:添加圖例的示例圖形
篇幅有限,就不把程式碼直接貼出來了,大家感興趣可以找胖雨小姐姐要程式碼哦!
有時候我們要把文本或者數字標註在圖形上,這件事情在很多繪圖軟體中是比較難實現的一個事情,但是對R語言來說,這些都是小case。函數text()和mtext()可以幫我們解決這個問題。下面是一個用mtcars數據框實現的例子。

圖13:文本標註的例子
最後,圖形繪製還有一個重要的參數,就是圖形尺寸和邊界尺寸。參數pin,mai,mar就是用於控制這兩個特徵的。圖例如下:

圖14:圖形尺寸的控制
這兩個圖形在一張圖裡面,並不是ps或者美圖秀秀的功勞,這就涉及到下一次教程要說到的圖形的組合了。
後面幾張圖的程式碼因為篇幅有限,都沒有直接貼出來,建議大家直接聯繫客服小姐姐索取哦~

小結
R語言繪圖其實沒有任何特別難的地方,只需要多費點腦子,多多記憶函數和參數就OK了。記住一句話:編程是不會把電腦編壞的,不要把電腦當作嬌花嫩草,多上手多練習才能記憶深刻。此外,據我以往多年的授課經驗,課程越往後,掉隊的人越多,所以,還在堅持的各位,要加油哦~
本期乾貨
·
!R語言入門繪圖程式碼 !
原文詳情:「科研貓」公眾號