這一節(jié)將介紹更多的R圖形資源着憨。首先是定制R圖形的一些常用方法柄瑰,主要涉及數(shù)據(jù)和模型的圖形繪制落竹。然后是如何自定義其他類(lèi)型的圖形或點(diǎn)線等元素闷串。
A. 繪制二維圖形
在R中,繪制二維圖形主要有兩個(gè)函數(shù)plot()和matplot()筋量。
plot()函數(shù)主要繪制標(biāo)準(zhǔn)的x-y圖形烹吵,它是基于笛卡爾坐標(biāo)。這個(gè)函數(shù)會(huì)將兩個(gè)向量作為參數(shù)桨武,第一個(gè)向量作為橫軸的值肋拔,第二個(gè)向量作為縱軸的值。例如:
> x=(0:100)*2*pi/100
> y=sin(x)
> plot(x,y)
如果只將一個(gè)向量做為plot()函數(shù)的參數(shù)呀酸,則該向量的值將作為y軸的值凉蜂,而x軸的值由R自動(dòng)產(chǎn)生:
> plot(y)
matplot()函數(shù)將兩個(gè)矩陣作為參數(shù)。一個(gè)矩陣的列參照另一個(gè)矩陣的相應(yīng)列來(lái)繪制圖形性誉。在繪制同一個(gè)圖時(shí)窿吩,兩個(gè)矩陣的行數(shù)應(yīng)該一樣。如果行數(shù)不一樣错览,行數(shù)較少的那個(gè)矩陣用缺失值(NA)來(lái)填充纫雁。第一個(gè)矩陣的值會(huì)用在橫軸上。如果其中一個(gè)矩陣只有一個(gè)列倾哺,則繪制的所有圖形都將用該列的值轧邪。每一隊(duì)列所繪制的圖形顏色不一樣刽脖,編號(hào)會(huì)用來(lái)做為不同圖點(diǎn)的圖形符號(hào)。這些選項(xiàng)也可由用戶(hù)自己定義忌愚,例如:col=和pach=曲管,后面會(huì)介紹這些選項(xiàng)。在對(duì)圖形添加多個(gè)點(diǎn)時(shí)硕糊,matplot()函數(shù)可以省去很多麻煩院水,不用一一設(shè)定每個(gè)point()語(yǔ)句。matplot()函數(shù)可以統(tǒng)一設(shè)置各點(diǎn)的格式简十,并自動(dòng)選擇合適的坐標(biāo)軸范圍衙耕,使圖形中包含全部數(shù)據(jù),例如:
> y1=sin(x)
> y2=cos(x)
> y=cbind(y1,y2)
> matplot(x,y)
B. 符號(hào)勺远、線與坐標(biāo)軸風(fēng)格的選項(xiàng)
可以使用一些選項(xiàng)來(lái)制定R繪制的圖形橙喘。在函數(shù)plot()和matplot()中,選項(xiàng)通常作為附加參數(shù)被調(diào)用胶逢√梗可選參數(shù)能以任意順序輸入,以逗號(hào)隔開(kāi)初坠。如果省略這些參數(shù)和簸,它們大多會(huì)采用默認(rèn)值,下面將更加系統(tǒng)地介紹這些選項(xiàng)碟刺。
1
數(shù)字符號(hào)類(lèi)型
繪圖時(shí)對(duì)數(shù)據(jù)點(diǎn)所用的符號(hào)可通過(guò)pch=選項(xiàng)來(lái)指定(pch意思是“plotting character”)锁保。例如pch=1表示用圓圈繪制數(shù)據(jù)點(diǎn)。下圖就是常用的符號(hào)和對(duì)應(yīng)的數(shù)值代碼半沽。
2
連接線類(lèi)型
如果線是用來(lái)連接數(shù)據(jù)點(diǎn)或者繪制曲線爽柒,則可用lty=選項(xiàng)來(lái)控制它的樣式。一般的線類(lèi)型和對(duì)應(yīng)的數(shù)值代碼如下圖所示者填。
另外浩村,使用lty=選項(xiàng)和matplot()的其它選項(xiàng)時(shí),可將這些選項(xiàng)的值組成一個(gè)向量占哟,向量中的各元素會(huì)分別用到對(duì)應(yīng)的圖形上心墅,使其具有不同的樣式。例如:
> matplot(x,y,type="l",lty=c(1,2),col="black"
#Tips:我們可以看出來(lái)兩個(gè)函數(shù)圖分別用了線類(lèi)型不同的兩條線來(lái)繪制榨乎,col的設(shè)定可以保證兩條線的顏色相同怎燥。
3
曲線類(lèi)型
可用type=“”選項(xiàng)來(lái)指定不同的曲線類(lèi)型。例如:type=“p”表示在繪制曲線時(shí)蜜暑,只畫(huà)點(diǎn)而不畫(huà)連接線铐姚。常用的類(lèi)型如下:
p:只畫(huà)點(diǎn)的符號(hào)而不畫(huà)連接線。
l:只畫(huà)連接線而不畫(huà)點(diǎn)的符號(hào)史煎。
o:既畫(huà)點(diǎn)的符號(hào)谦屑,又畫(huà)連接線驳糯。
b:與o選項(xiàng)一樣篇梭,只是連接線不會(huì)與點(diǎn)的符號(hào)接觸氢橙。
h:在每個(gè)點(diǎn)與橫軸之間畫(huà)一條垂直線。
s:繪制“梯形”圖恬偷,即先用水平直線悍手,然后用豎線連接相鄰點(diǎn)。
S:同s相似袍患,只是水平線和垂直線順序相反坦康。
c:連接線里剔除掉點(diǎn)位置。
4
坐標(biāo)軸的限制
選項(xiàng)xlim=和ylim=可分別用來(lái)限制橫軸和縱軸的范圍诡延,例如滞欠,xlim=c(0,10)會(huì)讓R只使用橫軸值在0到10范圍內(nèi)的數(shù)據(jù)。如果數(shù)據(jù)超過(guò)此范圍肆良,就不會(huì)出現(xiàn)在繪制的圖形中筛璧。
5
刻度線
在坐標(biāo)軸上的刻度線由選項(xiàng)lab=和tcl=控制。lab=選項(xiàng)是一個(gè)向量惹恃,它有兩個(gè)元素夭谤,第一個(gè)元素是橫軸的刻度線數(shù)量,第二個(gè)選項(xiàng)是縱軸的刻度線數(shù)量巫糙。例如lab=(7,3)表示x軸被7個(gè)刻度線分成8個(gè)間隔朗儒;y軸被3個(gè)刻度線分成4個(gè)間隔。如果所指定的lab=選項(xiàng)不能使繪制的圖形正常顯示参淹,R可能會(huì)重新用恰當(dāng)?shù)闹祦?lái)代替lab=選項(xiàng)的值醉锄。tcl=選項(xiàng)將一行文字的高度作為刻度線的長(zhǎng)度。tcl的值為負(fù)數(shù)是表示刻度線在坐標(biāo)軸外浙值,為正數(shù)表示刻度線在坐標(biāo)軸內(nèi)榆鼠。
6
坐標(biāo)軸標(biāo)簽
在默認(rèn)的情況下,橫軸和縱軸的標(biāo)簽是繪圖向量的名稱(chēng)亥鸠。將標(biāo)簽通過(guò)xlab=“”和ylab=“”選項(xiàng)來(lái)修改妆够,將所需的文本字符串放在引號(hào)中即可。例如:xlab=“time”负蚊,ylab=“population size”神妹。
7
不顯示坐標(biāo)軸
有時(shí)圖形不需要坐標(biāo)軸會(huì)更好看些。不顯示坐標(biāo)軸的選項(xiàng)是axes=FALSE家妆,不顯示坐標(biāo)軸標(biāo)簽的選項(xiàng)是ann=FALSE鸵荠。
8
字符和標(biāo)簽大小可用選項(xiàng)cex=來(lái)修改
在默認(rèn)情況下,cex指定的值為默認(rèn)字符大小的倍數(shù)伤极。cex的默認(rèn)值為1蛹找。比如若cex=2姨伤,所繪制的字符為正常大小的2倍;cex=0.5庸疾,所繪制的字符是正常大小的一半乍楚。下面這些繪圖選項(xiàng)也是通過(guò)類(lèi)似的方式控制大小,即届慈,都是參數(shù)值作為默認(rèn)大小的倍數(shù)徒溪。
cex.axis= 為刻度文本大小的倍數(shù)
cex.lab= 為軸標(biāo)簽文本大小的倍數(shù)
cex.main=為標(biāo)題文本大小的倍數(shù)
cex.sub= 為子標(biāo)題文本大小的倍數(shù)
lwd= 為所畫(huà)線寬度的倍數(shù)
9
字體族、字號(hào)和字樣的參數(shù)
font= 用于指定繪圖使用的字體樣式金顿。1=常規(guī)臊泌,2=粗體,3=斜體揍拆,4=粗斜體渠概,5=符號(hào)字體(以Adobe符號(hào)編碼表示)
font.axis= 坐標(biāo)軸刻度文字的字體樣式
font.lab= 坐標(biāo)軸標(biāo)簽(名稱(chēng))的字體樣式
font.main= 標(biāo)題的字體樣式
font.sub= 副標(biāo)題的字體樣式
ps 字體磅值(1磅約為1/72英寸)。文本的最終大小為 ps*cex
family 繪制文本時(shí)使用的字體族嫂拴。標(biāo)準(zhǔn)的取值為serif(襯線)播揪、sans(無(wú)襯線)和mono(等寬)
C. 顏色
在數(shù)據(jù)圖形中顏色應(yīng)該謹(jǐn)慎且有節(jié)制地使用。當(dāng)使用顏色時(shí)顷牌,應(yīng)突出重要的信息剪芍,而不能隨意使用它。顏色會(huì)產(chǎn)生干擾窟蓝,當(dāng)圖中的符號(hào)具有不同顏色時(shí)罪裹,眼睛會(huì)自動(dòng)尋找不同顏色的含義。純粹的裝飾色彩會(huì)將人們的注意力從圖形本身所要表達(dá)的信息引開(kāi)运挫。用彩色數(shù)據(jù)圖形還會(huì)有一個(gè)不太重要但也不能忽略的問(wèn)題:一小部分人是色盲状共,而這部分人的數(shù)量也不在少數(shù)。
若要在繪圖函數(shù)中使用彩色谁帕,可通過(guò)下面這些選項(xiàng)集來(lái)實(shí)現(xiàn):
col=用來(lái)指定plot()函數(shù)和 matplot()函數(shù)中數(shù)據(jù)符號(hào)和曲線的顏色峡继,還有barplot()函數(shù)生成的條形圖顏色;
col.axis=坐標(biāo)軸的顏色
col.lab=坐標(biāo)軸標(biāo)簽的顏色
col.main=主標(biāo)題顏色
col.sub=副標(biāo)題顏色
fg= 圖形的前景色
bg= 圖形的背景色
顏色可通過(guò)代碼值來(lái)指定匈挖。例如col=25會(huì)得到藍(lán)色碾牌。在控制臺(tái)執(zhí)行colors()函數(shù)就可知R能識(shí)別657種顏色,為了方便起見(jiàn)儡循,會(huì)列出657顏色名稱(chēng)舶吗,這些名稱(chēng)能被R識(shí)別。所以择膝,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"
當(dāng)然有些時(shí)候我們需要在圖形上繪制獨(dú)立的點(diǎn),線或者文本等,這些都不是繪圖函數(shù)的參數(shù)腹侣,需要獨(dú)立的函數(shù)來(lái)支撐叔收,我們下一節(jié)就為大家來(lái)介紹這些。
參考資料:
1. 《R語(yǔ)言統(tǒng)計(jì)入門(mén)(第二版)》 人民郵電出版社? Peter Dalgaard著?
2. 《R語(yǔ)言初學(xué)者指南》 人民郵電出版社? Brian Dennis著
3. Vicky的小筆記本《blooming for you》by Vicky