R語言學(xué)習筆記(3):繪圖
R提供了非常豐富的繪圖功能,可以通過命令:demo (graphics) 或者demo(persp)來體驗R繪圖功能的強大。
圖形工具是 R 環(huán)境的一個重要組成部分。 R提供了多種繪圖相關(guān)的命令,分成三類:
高級繪圖命令:在圖形設(shè)備上產(chǎn)生一個新的圖區(qū),它可能包括坐標軸,標簽,標題等等。
低級繪圖命令:在一個已經(jīng)存在的圖上加上更多的圖形元素,如額外的點,線和標簽。
交互式圖形命令:允許交互式地用鼠標在一個已經(jīng)存在的圖上添加圖形信息或者提取圖形信息。
在R中執(zhí)行繪圖命令,會啟動一個圖形設(shè)備驅(qū)動(device driver)。該驅(qū)動會打開特定的圖形窗口(graphics window)以顯示交互式的圖片。一旦設(shè)備驅(qū)動啟動,R 繪圖命令可以用來產(chǎn)生統(tǒng)計圖或者設(shè)計全新的圖形顯示。此外,R 有一系列圖形參數(shù)。這些圖形參數(shù)可以修改從而定制你的圖形環(huán)境。
高級繪圖命令
高級圖形顯示函數(shù)可以根據(jù)數(shù)據(jù)顯示完整的圖形(chart),包括坐標軸,標簽、標題、序列等。如果你之前熟悉其他繪圖庫(比如JFreeChart,matplotlib等)的概念,可以很容易的掌握R中的繪圖函數(shù)。
圖表類型
R支持很多圖表類型。在擴展包里面可能會提供更多的圖表類型。下表給出R基本環(huán)境中支持的圖表類型及其對應(yīng)的繪圖函數(shù):
- plot(x) 以x的元素值為縱坐標、以序號為橫坐標繪圖
- plot(x,y) x(在x-軸上)與y(在y-軸上)的二元作圖
- sunflowerplot(x,y)同上,但是以相似坐標的點作為花朵,其花瓣數(shù)目為點的個數(shù)
- pie(x)餅圖
- boxplot(x)盒形圖(“box-and-whiskers”)
- stripchart(x)把x的值畫在一條線段上,樣本量較小時可作為盒形圖的替代
- coplot(x~y|z)關(guān)于z的每個數(shù)值(或數(shù)值區(qū)間)繪制x與y的二元圖
- interaction.plot(f1, f2, y)如果f1和f2是因子,作y的均值圖,以f1的不同值作為x軸, 而f2的不同值對應(yīng)不同曲線;可以用選項fun指定y的其他的統(tǒng)計量(缺省計算均值,fun=mean)
- matplot(x,y)二元圖,其中x的第一列對應(yīng)y的第一列,x的第二列對應(yīng)y的第二列,依次類推。
- dotchart(x)如果x是數(shù)據(jù)框,作Cleveland點圖(逐行逐列累加圖)
- fourfoldplot(x)用四個四分之一圓顯示2X2列聯(lián)表情況(x必須是dim=c(2,2,k)的數(shù)組,或者是dim=c(2,2)的矩陣,如果k=1)
- assocplot(x)Cohen–Friendly圖,顯示在二維列聯(lián)表中行、列變量偏離獨立性的程度
- mosaicplot(x)列聯(lián)表的對數(shù)線性回歸殘差的馬賽克圖
- pairs(x)如果x是矩陣或是數(shù)據(jù)框,作x的各列之間的二元圖
- plot.ts(x)如果x是類"ts"的對象,作x的時間序列曲線,x可以是多元的,但是序列必須有相同的頻率和時間
- ts.plot(x)同上,但如果x是多元的,序列可有不同的時間但須有相同的頻率
- hist(x)x的頻率直方圖
- barplot(x)x的值的條形圖
- qqnorm(x)正態(tài)分位數(shù)-分位數(shù)圖
- qqplot(x,y)y對x的分位數(shù)-分位數(shù)圖
- contour(x,y,z)等高線圖(畫曲線時用內(nèi)插補充空白的值)
- filled.contour(x,y,z)同上,等高線之間的區(qū)域是彩色的,并且繪制彩色對應(yīng)的值的圖例
- image(x,y,z)同上,但是實際數(shù)據(jù)大小用不同色彩表示
- persp(x,y,z)同上,但為透視圖
- stars(x)如果x是矩陣或者數(shù)據(jù)框,用星形和線段畫出
- symbols(x,y,...)在由x和y給定坐標畫符號(圓,正方形,長方形,星,溫度計式或者盒形圖),符號的類型、大小、顏色等由另外的變量指定
- termplot(mod.obj)回歸模型(mod.obj)的(偏)影響圖
- heatmap(x)熱度圖
其他的包中可能也會提供額外的圖表類型,比如:
quantmod包提供的K線圖:chartSeries()
portfolio包提供的tree map(板塊層級圖):map.market(id, area, group, color)用矩形面積來表示數(shù)值,可用于分析磁盤空間占用
lattice包提供的平行坐標圖:parallel(data)
- > x = rnorm(10)
- > y = rnorm(10)
- > plot(x,y)
繪圖參數(shù)
很多時候,你可能需要調(diào)整圖形的顯示方式。R的繪圖參數(shù)幾乎可以定制圖形的任何顯示(如標題,坐標軸,顏色,字體等)。
R 擁有一個數(shù)目很大的圖形參數(shù)列表。該列表包括控制線條樣式,顏色,圖形排列和文字對齊等方面的參數(shù)。
更改圖形參數(shù)有兩種方式,一種是直接在繪圖函數(shù)中設(shè)置參數(shù),這種方式只影響當前繪圖函數(shù),但是不是所有的參數(shù)都能夠通過這種方式設(shè)置;另一種是通過par()函數(shù)設(shè)置,這種方式會影響當前繪圖設(shè)備上的所有圖形。
下面先看一個直接設(shè)置參數(shù)的例子:
- >plot(x,y,type="b",main="main title",sub='sub title',xlab="x axis",ylab='y axis',asp=0.2)
使用par()函數(shù)的例子:
- opar <- par()#備份原來的繪圖參數(shù)
- par(bg="lightyellow", col.axis="blue", mar=c(4, 4, 2.5, 0.25))
- plot(x, y, xlab="Ten random values", ylab="Ten other values",
- xlim=c(-2, 2), ylim=c(-2, 2), pch=22, col="red", bg="yellow",
- bty="l", tcl=-.25, las=1, cex=1.5)
- par(opar)#恢復(fù)原來的繪圖參數(shù)
通過?par可以查到所有參數(shù)的說明。下面列舉最常用的一些參數(shù):
adj控制關(guān)于文字的對齊方式,0是左對齊,0.5是居中對齊,1是右對齊,值> 1時對齊位置在文本右邊的地方,取負值時對齊位置在文本左邊的地方;如果給出兩個值(例如c(0, 0)),第二個只控制關(guān)于文字基線的垂直調(diào)整
bg指定背景色(例如bg="red", bg="blue"; 用colors()可以顯示657種可用的顏 色名)
bty控制圖形邊框形狀,可用的值為: "o", "l", "7", "c", "u" 和"]" (邊框和字符 的外表相像);如果bty="n"則不繪制邊框
cex控制缺省狀態(tài)下符號和文字大小的值;另外,cex.axis控制坐標軸刻度數(shù)字大小,cex.lab控制坐標軸標簽文字大小,cex.main控制標題文字大小,cex.sub控制副標題文字大小
col控制符號的顏色;和cex類似,還可用:col.axis, col.lab, col.main, col.sub
font控制文字字體的整數(shù)(1: 正常,2: 斜體,3: 粗體,4: 粗斜體);和cex類似, 還可用: font.axis, font.lab, font.main, font.sub
las控制坐標軸刻度數(shù)字標記方向的整數(shù)(0: 平行于軸,1: 橫排,2: 垂直于軸,3: 豎排)
lty控制連線的線型,可以是整數(shù)(1: 實線,2: 虛線,3: 點線,4: 點虛線,5: 長虛線,6: 雙虛線),或者是不超過8個字符的字符串(字符為從"0"到"9"之間的數(shù)字)交替地指定線和空白的長度,單位為磅(points)或象素,例如lty="44"和lty=2效果相同
lwd控制連線寬度的數(shù)字
mar控制圖形邊空的有4個值的向量c(bottom, left, top, right), 缺省值 為c(5.1, 4.1, 4.1, 2.1)
mfcolc(nr,nc)的向量,分割繪圖窗口為nr行nc列的矩陣布局,按列次序使用各子窗口
mfrow同上,但是按行次序使用各子窗口(參照 4.1.2)
pch控制符號的類型,可以是1到25的整數(shù),也可以是""里的單個字符
ps控制文字大小的整數(shù),單位為磅(points)
pty指定繪圖區(qū)域類型的字符,"s": 正方形,"m":最大利用
tck指定軸上刻度長度的值,單位是百分比,以圖形寬、高中最小一個作為基數(shù); 如果tck=1則繪制grid
tcl同上,但以文本行高度為基數(shù)(缺省下tcl=-0.5)
xaxt如果xaxt="n"則設(shè)置x-軸但不顯示(有助于和axis(side=1, ...)聯(lián)合使用)
yaxt如果yaxt="n"則設(shè)置y-軸但不顯示(有助于和axis(side=2, ...)聯(lián)合使用)
低級繪圖命令
R還可以在現(xiàn)有圖形(通過高級繪圖命令繪制)的基礎(chǔ)上增加一些額外的顯示,如標題、繪制坐標軸、在特定的位置增加圖形(比如輔助線,擬合線)或文字等。
這些函數(shù)在R中稱為低級作圖命 令(low-level plotting commands)。一些常用的低級圖形命令包括:
scatter.smooth(x, y, …)LOESS(局部加權(quán)散點平滑)擬合曲線
points(x, y)添加點(可以使用選項type=)
lines(x, y)同上,但是添加線
text(x, y, labels,…)在(x,y)處添加用labels指定的文字;典型的用法是: plot(x, y, type=”n”); text(x, y, names)
mtext(text,side=3, line=0,…)在邊空添加用text指定的文字,用side指定添加到哪一邊(參照 下面的axis());line指定添加的文字距離繪圖區(qū)域的行數(shù)
segments(x0, y0,x1, y1)從(x0,y0)各點到(x1,y1)各點畫線段
arrows(x0, y0,x1, y1, angle= 30,code=2)同上但加畫箭頭,如果code=2則在各(x0,y0)處畫箭頭,如 果code=1則在各(x1,y1)處畫箭頭,如果code=3則在兩端都畫箭頭; angle控制箭頭軸到箭頭邊的角度
abline(a,b)繪制斜率為b和截距為a的直線
abline(h=y)在縱坐標y處畫水平線
abline(v=x)在橫坐標x處畫垂直線
abline(lm.obj)畫由lm.obj確定的回歸線
rect(x1, y1, x2, y2)繪制長方形,(x1, y1)為左下角,(x2,y2)為右上角
polygon(x, y)繪制連接各x,y坐標確定的點的多邊形
legend(x, y, legend)在點(x,y)處添加圖例,說明內(nèi)容由legend給定
title()添加標題,也可添加一個副標題
axis(side, vect)畫坐標軸,side=1時畫在下邊,side=2時畫在左邊,side=3時畫在上邊,side=4時畫在右邊。可選參數(shù)at指定畫刻度線的位置坐標
box()在當前的圖上加上邊框
rug(x)在x-軸上用短線畫出x數(shù)據(jù)的位置
locator(n, type=”n”, …)在用戶用鼠標在圖上點擊n次后返回n次點擊的坐標(x, y);并可以在點擊處繪制符號(type=”p”時)或連線(type=”l”時),缺省情 況下不畫符號或連線
下面的例子中,使用plot(...,type="n")繪制一個“空白”的圖形, 然后用低級函數(shù)來添加點,坐標軸,標簽等:
- opar <- par()#備份繪圖參數(shù)
- par(bg="lightgray", mar=c(2.5, 1.5, 2.5, 0.25))#設(shè)置繪圖參數(shù)
- plot(x, y, type="n", xlab="", ylab="", xlim=c(-2, 2), ylim=c(-2, 2), xaxt="n", yaxt="n")#繪制“空白”圖形,設(shè)定坐標軸范圍
- rect(-3, -3, 3, 3, col="cornsilk")#修改繪圖區(qū)域的顏色
- points(x, y, pch=10, col="red", cex=2)#畫點
- axis(side=1, c(-2, 0, 2), tcl=-0.2, labels=FALSE)#添加坐標軸
- axis(side=2, -1:1, tcl=-0.2, labels=FALSE)
- title("How to customize a plot with R (ter)",#添加標題
- font.main=4, adj=1, cex.main=1)
- mtext("Ten random values", side=1, line=1, at=1, cex=0.9, font=3)#繪制坐標軸標簽
- mtext("Ten other values", line=0.5, at=-1.8, cex=0.9, font=3)
- mtext(c(-2, 0, 2), side=1, las=1, at=c(-2, 0, 2), line=0.3,
- col="blue", cex=0.9)
- mtext(-1:1, side=2, las=1, at=-1:1, line=0.2, col="blue", cex=0.9)
- par(opar)#恢復(fù)繪圖參數(shù)

交互式繪圖命令
有時需要根據(jù)用戶的想法而不是數(shù)據(jù)進行繪圖,即交互式繪圖。R對此有很好的支持,允許用戶直接用鼠標在一個圖上提取和提交信息。
R中最簡單、最常用的函數(shù)是locator(n, type)。等待用戶用鼠標左鍵點擊n個位置,如果設(shè)置了type,還可以根據(jù)這n個位置直接進行低級繪圖。
比如:
- x = rnorm(10)
- plot(x)
- locator(5,"o")
locator也可以先不繪圖,只把用戶點擊的坐標記錄下來:
- r = locator(2)
- r
這個有意思的交互函數(shù)是identify(x, y, labels),可以參考幫助自己學(xué)習。
原文鏈接:http://www.cnblogs.com/holbrook/archive/2013/05/13/3075777.html
【編輯推薦】
1.R語言學(xué)習筆記(2):數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)