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

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