圖形初階
pdf("mygraph.pdf")
attach(mtcars) #綁定了數(shù)據(jù)框mtcars
plot(wt, mpg) #繪制散點(diǎn)圖
abline(lm(mpg~wt)) #向圖形添加了一條最優(yōu)擬合曲線
title("Regression of MPG on Weight") #添加了標(biāo)題
detach(mtcars) #為數(shù)據(jù)框解除了綁定
dev.off()
通過執(zhí)行如plot()诵次、hist()(繪制直方圖)或boxplot()這樣的高級(jí)繪圖命令來(lái)創(chuàng)建一幅新圖形時(shí)愈魏,通常會(huì)覆蓋掉先前的圖形母市。如何才能創(chuàng)建多個(gè)圖形并隨時(shí)查看每一個(gè)呢灾票?
dev.new()
statements to create graph 1
dev.new()
statements to create a graph 2
etc.
plot(x, y, type="b")將x置于橫軸摇邦,將y置于縱軸此改,繪制點(diǎn)集(x, y)趾撵,然后使用線段將其連接。選項(xiàng)type="b"表示同時(shí)繪制點(diǎn)和線共啃。
可以通過修改稱為圖形參數(shù)的選項(xiàng)來(lái)自定義一幅圖形的多個(gè)特征(字體占调、顏色、坐標(biāo)軸移剪、標(biāo)簽)究珊。
一種方法是通過函數(shù)par()來(lái)指定這些選項(xiàng)。以這種方式設(shè)定的參數(shù)值除非被再次修改纵苛,否則將在會(huì)話結(jié)束前一直有效剿涮。
其調(diào)用格式為par(optionname=value,optionname=name,...)。
不加參數(shù)地執(zhí)行par()將生成一個(gè)含有當(dāng)前圖形參數(shù)設(shè)置的列表攻人。
添加參數(shù)no.readonly=TRUE可以生成一個(gè)可以修改的當(dāng)前圖形參數(shù)列表取试。
opar <- par(no.readonly=TRUE) #復(fù)制了一份當(dāng)前的圖形參數(shù)設(shè)置
par(lty=2, pch=17) #將默認(rèn)的線條類型修改為虛線(lty=2),并將默認(rèn)的點(diǎn)符號(hào)改為了實(shí)心三角(pch=17)
plot(dose, drugA, type="b")
par(opar) #還原了原始設(shè)置
第二種方法是為高級(jí)繪圖函數(shù)直接提供optionname=value的鍵值對(duì)怀吻。這種情況下瞬浓,指定的選項(xiàng)僅對(duì)這幅圖形本身有效:plot(dose, drugA, type="b", lty=2, pch=17)
可以通過顏色下標(biāo)、顏色名稱蓬坡、十六進(jìn)制的顏色值猿棉、RGB值或HSV值來(lái)指定顏色。舉例來(lái)說(shuō)渣窜,col=1铺根、col="white"、col="#FFFFFF"乔宿、col=rgb(1,1,1)和col=hsv(0,0,1)都是表示白色的等價(jià)方式位迂。
3-1 使用圖形參數(shù)控制圖形外觀
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
opar <- par(no.readonly=TRUE)
par(pin=c(2, 3)) #修改了默認(rèn)的圖形參數(shù):2英寸寬、3英寸高
par(lwd=2, cex=1.5) #線條的寬度將為默認(rèn)寬度的兩倍,符號(hào)將為默認(rèn)大小的1.5倍
par(cex.axis=.75, font.axis=3) #坐標(biāo)軸刻度文本被設(shè)置為斜體掂林、縮小為默認(rèn)大小的75%
plot(dose, drugA, type="b", pch=19, lty=2, col="red") #使用紅色實(shí)心圓圈和虛線創(chuàng)建第一幅圖形
plot(dose, drugB, type="b", pch=23, lty=6, col="blue",bg="green") #使用綠色填充的綠色菱形加藍(lán)色邊框和藍(lán)色虛線創(chuàng)建第二幅圖形
par(opar)
某些高級(jí)繪圖函數(shù)已經(jīng)包含了默認(rèn)的標(biāo)題和標(biāo)簽臣缀。你可以通過在plot()語(yǔ)句或單獨(dú)的par()語(yǔ)句中添加ann=FALSE來(lái)移除它們。
可以使用title()函數(shù)為圖形添加標(biāo)題和坐標(biāo)軸標(biāo)簽泻帮。調(diào)用格式為:title(main="main title", sub="subtitle",xlab="x-axis label", ylab="y-axis label")
舉例來(lái)說(shuō)精置,以下代碼將生成紅色的標(biāo)題和藍(lán)色的副標(biāo)題,以及比默認(rèn)大小小25%的綠色x軸锣杂、y軸標(biāo)簽:
title(main="My Title", col.main="red",sub="My Subtitle", col.sub="blue",xlab="My X label", ylab="My Y label", col.lab="green", cex.lab=0.75)
可以使用函數(shù)axis()來(lái)創(chuàng)建自定義的坐標(biāo)軸脂倦,其格式為:
axis(side, at=, labels=, pos=, lty=, col=, las=, tck=, ...)
創(chuàng)建自定義坐標(biāo)軸時(shí),你應(yīng)當(dāng)禁用高級(jí)繪圖函數(shù)自動(dòng)生成的坐標(biāo)軸元莫。參數(shù)axes=FALSE將禁用全部坐標(biāo)軸(包括坐標(biāo)軸框架線赖阻,除非你添加了參數(shù)frame.plot=TRUE)。參數(shù)xaxt="n"和yaxt="n"將分別禁用X軸或Y軸(會(huì)留下框架線踱蠢,只是去除了刻度)火欧。
3-2 自定義坐標(biāo)軸的示例
x <- c(1:10)
y <- x
z <- 10/x
opar <- par(no.readonly=TRUE)
par(mar=c(5, 4, 4, 8) + 0.1) #增加邊界大小
plot(x, y, type="b",pch=21, col="red",yaxt="n", lty=3, ann=FALSE)
lines(x, z, type="b", pch=22, col="blue", lty=2) #添加x對(duì)1/x的直線
axis(2, at=x, labels=x, col.axis="red", las=2) #繪制坐標(biāo)軸
axis(4, at=z, labels=round(z, digits=2),col.axis="blue", las=2, cex.axis=0.7, tck=-.01)mtext("y=1/x", side=4, line=3, cex.lab=1, las=2, col="blue") #添加標(biāo)題和文本
title("An Example of Creative Axes",
xlab="X values",
ylab="Y=X")
par(opar)
創(chuàng)建次要刻度線,需要使用Hmisc包中的minor.tick()函數(shù)茎截。
library(Hmisc)
minor.tick(nx=n, ny=n, tick.ratio=n)
其中nx和ny分別指定了X軸和Y軸每?jī)蓷l主刻度線之間通過次要刻度線劃分得到的區(qū)間個(gè)數(shù)苇侵。tick.ratio表示次要刻度線相對(duì)于主刻度線的大小比例。當(dāng)前的主刻度線長(zhǎng)度可以使用par("tck")獲取企锌。舉例來(lái)說(shuō)榆浓,下列語(yǔ)句將在X軸的每?jī)蓷l主刻度線之間添加1條次要刻度線,并在Y軸的每?jī)蓷l主刻度線之間添加2條次要刻度線:
minor.tick(nx=2, ny=3, tick.ratio=0.5)
次要刻度線的長(zhǎng)度將是主刻度線的一半撕攒。
abline()可以用來(lái)為圖形添加參考線哀军。abline(h=yvalues, v=xvalues)
legend()添加圖例。legend(location, title, legend, ...)
3-3
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
opar <- par(no.readonly=TRUE)
par(lwd=2, cex=1.5, font.lab=2)
plot(dose, drugA, type="b",pch=15, lty=1, col="red", ylim=c(0, 60),main="Drug A vs. Drug B",xlab="Drug Dosage", ylab="Drug Response")
lines(dose, drugB, type="b",pch=17, lty=2, col="blue")
abline(h=c(30), lwd=1.5, lty=2, col="gray") #添加參考線
library(Hmisc) #添加次要刻度線
minor.tick(nx=3, ny=3, tick.ratio=0.5)
legend("topleft", inset=.05, title="Drug Type", c("A","B"), lty=c(1, 2), pch=c(15, 17), col=c("red", "blue")) #添加圖例
par(opar)
數(shù)text()和mtext()將文本添加到圖形上打却。text()可向繪圖區(qū)域內(nèi)部添加文本,而mtext()則向圖形的四個(gè)邊界之一添加文本谎倔。
text(location, "text to place", pos, ...)
mtext("text to place", side, line=n, ...)
#展示不同字體族
opar <- par(no.readonly=TRUE)
par(cex=1.5)
plot(1:7,1:7,type="n")
text(3,3,"Example of default text")
text(4,4,family="mono","Example of mono-spaced text")
text(5,5,family="serif","Example of serif text")
par(opar)
除了用來(lái)添加文本標(biāo)注以外柳击,text()函數(shù)也通常用來(lái)標(biāo)示圖形中的點(diǎn)。
只需指定一系列的x片习、y坐標(biāo)作為位置參數(shù)捌肴,同時(shí)以向量的形式指定要放置的文本。
x藕咏、y和文本標(biāo)簽向量的長(zhǎng)度應(yīng)當(dāng)相同状知。
attach(mtcars)
plot(wt, mpg,
main="Mileage vs. Car Weight",
xlab="Weight", ylab="Mileage",
pch=18, col="blue")
text(wt, mpg,
row.names(mtcars),
cex=0.6, pos=4, col="red")
detach(mtcars)
使用函數(shù)par()或layout()可以容易地組合多幅圖形為一幅總括圖形。
在par()函數(shù)中使用圖形參數(shù)mfrow=c(nrows, ncols)來(lái)創(chuàng)建按行填充的孽查、行數(shù)為nrows饥悴、列數(shù)為ncols的圖形矩陣。另外,可以使用mfcol=c(nrows, ncols)按列填充矩陣西设。
layout()的調(diào)用形式為layout(mat)瓣铣,其中的mat是一個(gè)矩陣,它指定了所要組合的多個(gè)圖形的所在位置贷揽。
#創(chuàng)建四幅圖形并將其排布在兩行兩列中
attach(mtcars)
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2))
plot(wt,mpg, main="Scatterplot of wt vs. mpg")
plot(wt,disp, main="Scatterplot of wt vs. disp")
hist(wt, main="Histogram of wt")
boxplot(wt, main="Boxplot of wt")
par(opar)
detach(mtcars)
#依三行一列排布三幅圖形
attach(mtcars)
opar <- par(no.readonly=TRUE)
par(mfrow=c(3,1))
hist(wt)
#高級(jí)繪圖函數(shù)hist()包含了一個(gè)默認(rèn)的標(biāo)題(使用main=""可以禁用它棠笑,抑或使用ann=FALSE來(lái)禁用所有標(biāo)題和標(biāo)簽)
hist(mpg)
hist(disp)
par(opar)
detach(mtcars)
#layout()
attach(mtcars)
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
為了更精確地控制每幅圖形的大小,可以有選擇地在layout()函數(shù)中使用widths=和heights=兩個(gè)參數(shù)禽绪。其形式為:
? widths = 各列寬度值組成的一個(gè)向量
? heights = 各行高度值組成的一個(gè)向量
相對(duì)寬度可以直接通過數(shù)值指定蓖救,絕對(duì)寬度(以厘米為單位)可以通過函數(shù)lcm()來(lái)指定。
attach(mtcars)
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow = TRUE),
widths=c(3, 1), heights=c(1, 2))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
#再次將一幅圖形置于第1行印屁,兩幅圖形置于第2行循捺。
#但第1行中圖形的高度是第2行中圖形高度的二分之一。
#除此之外库车,右下角圖形的寬度是左下角圖形寬度的三分之一
3-4 多幅圖形布局的精細(xì)控制
opar <- par(no.readonly=TRUE)
par(fig=c(0, 0.8, 0, 0.8)) #fig=的取值是一個(gè)形如c(x1, x2, y1, y2)的數(shù)值向量巨柒。
plot(mtcars$wt, mtcars$mpg,xlab="Miles Per Gallon",ylab="Car Weight")
par(fig=c(0, 0.8, 0.55, 1), new=TRUE)
boxplot(mtcars$wt, horizontal=TRUE, axes=FALSE) #在上方添加箱線圖
par(fig=c(0.65, 1, 0, 0.8), new=TRUE)
boxplot(mtcars$mpg, axes=FALSE) #在右側(cè)添加箱線圖
mtext("Enhanced Scatterplot", side=3, outer=TRUE, line=-3)
par(opar)
fig=的取值是一個(gè)形如c(x1, x2, y1, y2)的數(shù)值向量。
第一個(gè)fig=將散點(diǎn)圖設(shè)定為占據(jù)橫向范圍0-0.8柠衍,縱向范圍0-0.8洋满。上方的箱線圖橫向占據(jù)0-0.8,縱向0.55-1珍坊。右側(cè)的箱線圖橫向占據(jù)0.65-1牺勾,縱向0-0.8。
fig=默認(rèn)會(huì)新建一幅圖形阵漏,所以在添加一幅圖到一幅現(xiàn)有圖形上時(shí)驻民,請(qǐng)?jiān)O(shè)定參數(shù)new=TRUE。