這一節(jié)將介紹更多的R圖形資源。首先是定制R圖形的一些常用方法,主要涉及數(shù)據(jù)和模型的圖形繪制。然后是如何自定義其他類型的圖形或點線等元素。
A. 繪制二維圖形
在R中,繪制二維圖形主要有兩個函數(shù)plot()和matplot()。
plot()函數(shù)主要繪制標準的x-y圖形,它是基于笛卡爾坐標。這個函數(shù)會將兩個向量作為參數(shù),第一個向量作為橫軸的值,第二個向量作為縱軸的值。例如:
> x=(0:100)*2*pi/100
> y=sin(x)
> plot(x,y)
如果只將一個向量做為plot()函數(shù)的參數(shù),則該向量的值將作為y軸的值,而x軸的值由R自動產(chǎn)生:
> plot(y)
matplot()函數(shù)將兩個矩陣作為參數(shù)。一個矩陣的列參照另一個矩陣的相應列來繪制圖形。在繪制同一個圖時,兩個矩陣的行數(shù)應該一樣。如果行數(shù)不一樣,行數(shù)較少的那個矩陣用缺失值(NA)來填充。第一個矩陣的值會用在橫軸上。如果其中一個矩陣只有一個列,則繪制的所有圖形都將用該列的值。每一隊列所繪制的圖形顏色不一樣,編號會用來做為不同圖點的圖形符號。這些選項也可由用戶自己定義,例如:col=和pach=,后面會介紹這些選項。在對圖形添加多個點時,matplot()函數(shù)可以省去很多麻煩,不用一一設定每個point()語句。matplot()函數(shù)可以統(tǒng)一設置各點的格式,并自動選擇合適的坐標軸范圍,使圖形中包含全部數(shù)據(jù),例如:
> y1=sin(x)
> y2=cos(x)
> y=cbind(y1,y2)
> matplot(x,y)
B. 符號、線與坐標軸風格的選項
可以使用一些選項來制定R繪制的圖形。在函數(shù)plot()和matplot()中,選項通常作為附加參數(shù)被調(diào)用??蛇x參數(shù)能以任意順序輸入,以逗號隔開。如果省略這些參數(shù),它們大多會采用默認值,下面將更加系統(tǒng)地介紹這些選項。
1
數(shù)字符號類型
繪圖時對數(shù)據(jù)點所用的符號可通過pch=選項來指定(pch意思是“plotting character”)。例如pch=1表示用圓圈繪制數(shù)據(jù)點。下圖就是常用的符號和對應的數(shù)值代碼。
2
連接線類型
如果線是用來連接數(shù)據(jù)點或者繪制曲線,則可用lty=選項來控制它的樣式。一般的線類型和對應的數(shù)值代碼如下圖所示。
另外,使用lty=選項和matplot()的其它選項時,可將這些選項的值組成一個向量,向量中的各元素會分別用到對應的圖形上,使其具有不同的樣式。例如:
> matplot(x,y,type="l",lty=c(1,2),col="black"
#Tips:我們可以看出來兩個函數(shù)圖分別用了線類型不同的兩條線來繪制,col的設定可以保證兩條線的顏色相同。
3
曲線類型
可用type=“”選項來指定不同的曲線類型。例如:type=“p”表示在繪制曲線時,只畫點而不畫連接線。常用的類型如下:
p:只畫點的符號而不畫連接線。
l:只畫連接線而不畫點的符號。
o:既畫點的符號,又畫連接線。
b:與o選項一樣,只是連接線不會與點的符號接觸。
h:在每個點與橫軸之間畫一條垂直線。
s:繪制“梯形”圖,即先用水平直線,然后用豎線連接相鄰點。
S:同s相似,只是水平線和垂直線順序相反。
c:連接線里剔除掉點位置。
4
坐標軸的限制
選項xlim=和ylim=可分別用來限制橫軸和縱軸的范圍,例如,xlim=c(0,10)會讓R只使用橫軸值在0到10范圍內(nèi)的數(shù)據(jù)。如果數(shù)據(jù)超過此范圍,就不會出現(xiàn)在繪制的圖形中。
5
刻度線
在坐標軸上的刻度線由選項lab=和tcl=控制。lab=選項是一個向量,它有兩個元素,第一個元素是橫軸的刻度線數(shù)量,第二個選項是縱軸的刻度線數(shù)量。例如lab=(7,3)表示x軸被7個刻度線分成8個間隔;y軸被3個刻度線分成4個間隔。如果所指定的lab=選項不能使繪制的圖形正常顯示,R可能會重新用恰當?shù)闹祦泶鎙ab=選項的值。tcl=選項將一行文字的高度作為刻度線的長度。tcl的值為負數(shù)是表示刻度線在坐標軸外,為正數(shù)表示刻度線在坐標軸內(nèi)。
6
坐標軸標簽
在默認的情況下,橫軸和縱軸的標簽是繪圖向量的名稱。將標簽通過xlab=“”和ylab=“”選項來修改,將所需的文本字符串放在引號中即可。例如:xlab=“time”,ylab=“population size”。
7
不顯示坐標軸
有時圖形不需要坐標軸會更好看些。不顯示坐標軸的選項是axes=FALSE,不顯示坐標軸標簽的選項是ann=FALSE。
8
字符和標簽大小可用選項cex=來修改
在默認情況下,cex指定的值為默認字符大小的倍數(shù)。cex的默認值為1。比如若cex=2,所繪制的字符為正常大小的2倍;cex=0.5,所繪制的字符是正常大小的一半。下面這些繪圖選項也是通過類似的方式控制大小,即,都是參數(shù)值作為默認大小的倍數(shù)。
cex.axis= 為刻度文本大小的倍數(shù)
cex.lab= 為軸標簽文本大小的倍數(shù)
cex.main=為標題文本大小的倍數(shù)
cex.sub= 為子標題文本大小的倍數(shù)
lwd= 為所畫線寬度的倍數(shù)
9
字體族、字號和字樣的參數(shù)
font= 用于指定繪圖使用的字體樣式。1=常規(guī),2=粗體,3=斜體,4=粗斜體,5=符號字體(以Adobe符號編碼表示)
font.axis= 坐標軸刻度文字的字體樣式
font.lab= 坐標軸標簽(名稱)的字體樣式
font.main= 標題的字體樣式
font.sub= 副標題的字體樣式
ps 字體磅值(1磅約為1/72英寸)。文本的最終大小為 ps*cex
family 繪制文本時使用的字體族。標準的取值為serif(襯線)、sans(無襯線)和mono(等寬)
C. 顏色
在數(shù)據(jù)圖形中顏色應該謹慎且有節(jié)制地使用。當使用顏色時,應突出重要的信息,而不能隨意使用它。顏色會產(chǎn)生干擾,當圖中的符號具有不同顏色時,眼睛會自動尋找不同顏色的含義。純粹的裝飾色彩會將人們的注意力從圖形本身所要表達的信息引開。用彩色數(shù)據(jù)圖形還會有一個不太重要但也不能忽略的問題:一小部分人是色盲,而這部分人的數(shù)量也不在少數(shù)。
若要在繪圖函數(shù)中使用彩色,可通過下面這些選項集來實現(xiàn):
col=用來指定plot()函數(shù)和 matplot()函數(shù)中數(shù)據(jù)符號和曲線的顏色,還有barplot()函數(shù)生成的條形圖顏色;
col.axis=坐標軸的顏色
col.lab=坐標軸標簽的顏色
col.main=主標題顏色
col.sub=副標題顏色
fg= 圖形的前景色
bg= 圖形的背景色
顏色可通過代碼值來指定。例如col=25會得到藍色。在控制臺執(zhí)行colors()函數(shù)就可知R能識別657種顏色,為了方便起見,會列出657顏色名稱,這些名稱能被R識別。所以,col=“blue”與col=25是一樣的效果。
> colors()
? [1] "white"? ? ? ? ? ? ? ? "aliceblue"? ? ? ? ? ? "antiquewhite"? ? ? ?
? [4] "antiquewhite1"? ? ? ? "antiquewhite2"? ? ? ? "antiquewhite3"? ? ?
? [7] "antiquewhite4"? ? ? ? "aquamarine"? ? ? ? ? "aquamarine1"? ? ? ?
......? ? ? ?
[652] "yellow"? ? ? ? ? ? ? "yellow1"? ? ? ? ? ? ? "yellow2"? ? ? ? ? ?
[655] "yellow3"? ? ? ? ? ? ? "yellow4"? ? ? ? ? ? ? "yellowgreen"
當然有些時候我們需要在圖形上繪制獨立的點,線或者文本等,這些都不是繪圖函數(shù)的參數(shù),需要獨立的函數(shù)來支撐,我們下一節(jié)就為大家來介紹這些。
參考資料:
1. 《R語言統(tǒng)計入門(第二版)》 人民郵電出版社? Peter Dalgaard著?
2. 《R語言初學者指南》 人民郵電出版社? Brian Dennis著
3. Vicky的小筆記本《blooming for you》by Vicky