|
R有著非常強(qiáng)大的繪圖功能,我們可以利用簡單的幾行代碼繪制出各種圖形來,但是有時(shí)候默認(rèn)的圖形設(shè)置沒法滿足我們的需要,甚至?xí)龅礁鞣N各樣的小問題:如坐標(biāo)軸或者標(biāo)題出界了,或者圖例說明的大小或者位置遮擋住了圖形,甚至有時(shí)候默認(rèn)的顏色也不能滿足我們的需求。如何進(jìn)行調(diào)整呢?這就用到了“強(qiáng)大”的函數(shù)par()。我們可以通過設(shè)定函數(shù)par()的各個(gè)參數(shù)來調(diào)整我們的圖形,這篇博文就是對函數(shù)par()的各個(gè)參數(shù)進(jìn)行一下總結(jié)。
函數(shù)par()的使用格式如下:
par(...,
no.readonly = FALSE)
其中...表示所有類似于tag=value形式的參數(shù)。下面會具體的對這些參數(shù)進(jìn)行描述。當(dāng)參數(shù)no.readonly=TRUE時(shí),函數(shù)par()就只允許有這一個(gè)參數(shù)了,并且會返回當(dāng)前繪圖設(shè)備中各個(gè)參數(shù)的參數(shù)值。
每一個(gè)圖形設(shè)備都有自己的繪圖參數(shù),如果當(dāng)前還沒有打開繪圖設(shè)備,那么函數(shù)par()在進(jìn)行參數(shù)設(shè)置之前會自動(dòng)的打開一個(gè)新繪圖設(shè)備。
如前面所說,直接在R編輯器中輸入命令par()或者par(no.readonly=TRUE)都可以獲取當(dāng)前的各個(gè)繪圖參數(shù)。
函數(shù)par()中的參數(shù)可以分為三大類:
-
只能讀取,不能進(jìn)行設(shè)置。包括參數(shù)cin,
cra,csi,cxy,
din。 只能通過函數(shù)par()進(jìn)行設(shè)置。包括參數(shù):-
"ask","fig", "fin","lheight","mai", "mar", "mex",
"mfcol", "mfrow",
"mfg","new","oma", "omd",
"omi","pin", "plt", "ps",
"pty","usr","xlog", "ylog"
-
剩下的參數(shù)除了函數(shù)par()外,還可以通過各種高級繪圖函數(shù)進(jìn)行設(shè)置,如函數(shù)plot,points,lines,abline,title,text,axis,image,box,contour,rect,arrows等。
當(dāng)一個(gè)參數(shù)的值被設(shè)定時(shí),默認(rèn)的會返回設(shè)定之前這個(gè)參數(shù)的值,我們可以通常一些變量把這些值保存下來。執(zhí)行完操作之后,可以利用這些歷史值進(jìn)行恢復(fù)設(shè)定(但是不建議這么做,因?yàn)榭赡軙鹨恍﹨?shù)值沖突)。如:
> x<-par(bg="red")
> x
$bg
[1] "transparent"
> plot(1:10)
> par(x)
> plot(1:100)
接下來就對各個(gè)參數(shù)的含義進(jìn)行一下大概的說明,中間會用一些簡單的代碼作為示例。
-
-
adj。該參數(shù)值用于設(shè)定在text、mtext、title中字符串的對齊方向。0表示左對齊,0.5(默認(rèn)值)表示居中,而1表示右對齊(說明一下,區(qū)間[0,1]內(nèi)的任何值都可以作為參數(shù)adj的有效值,并且在大部分的圖形設(shè)備中,介于區(qū)間外的值也是有效的)。注意一下,函數(shù)text中的參數(shù)adj的值可以以類似于形式adj=c(x,y)調(diào)整方向。但是在text中該參數(shù)的值影響的是對點(diǎn)的標(biāo)記,對函數(shù)mtext和title來說,參數(shù)adj的值影響的是整個(gè)圖像或設(shè)備區(qū)域。 > par(mfrow=c(1,2))
> plot(1:4)
> title("plot(1:4)",adj=0)
> plot(1:4)
> title("plot(1:4)",adj=1)
-
ann。如果ann=FALSE,那么高水平繪圖函數(shù)會調(diào)用函數(shù)plot.default使對坐標(biāo)軸名稱、整體圖像名稱不做任何注解。默認(rèn)值為TRUE。
>
plot(1:4,ann=FALSE,main='plot(1:4,ann=FALSE)')#盡管指定了參數(shù)main的值,但是圖像中仍然沒有顯示
> plot(1:4,ann=TRUE,main='plot(1:4,ann=FALSE)')
-
ask,邏輯值。若為TRUE(且當(dāng)前的R會話是可交互狀態(tài)),則在繪制新圖像之前會要求用戶輸入確認(rèn)信息。同樣的,會對擴(kuò)展包grid和lattice的輸出有影響,甚至可能會應(yīng)用到?jīng)]有屏幕輸出的設(shè)備上(但可能會沒有效果)。 -
bg。用于設(shè)定繪圖區(qū)域的背景顏色。當(dāng)通過函數(shù)par()調(diào)用時(shí),會同時(shí)設(shè)定參數(shù)new=FALSE。對很多設(shè)備來說,該參數(shù)的初始值就是該設(shè)備的背景顏色值,其他情況下一般為"white"。需要注意一點(diǎn)的是,一些圖形函數(shù)例如plot.default和points等也有名為bg的參數(shù),但是代表的含義是不同的。 -
bty。該參數(shù)值為字符串型,用于限定圖形的邊框類型。如果bty的值為"o"(默認(rèn)值)、"l"、"7"、"c"、"u"或者"]"中的任意一個(gè),對應(yīng)的邊框類型就和該字母的形狀相似。如果bty的值為"n",表示無邊框。 -
cex。用于表示對默認(rèn)的繪圖文本和符號放大多少倍。需要注意一些繪圖函數(shù)如plot.default等也有一個(gè)相同名字的參數(shù),但是此時(shí)表示在函數(shù)par()的參數(shù)cex的基礎(chǔ)上再放大多少倍,此外還有函數(shù)points等接受一個(gè)數(shù)值向量為參數(shù)。 -
cex.axis。表示在當(dāng)前的cex設(shè)定情況下,對坐標(biāo)軸刻度值字體的放大倍數(shù)。 -
cex.lab。表示在當(dāng)前的cex設(shè)定情況下,對坐標(biāo)軸名稱字體的放大倍數(shù)。 -
cex.main。表示在當(dāng)前的cex設(shè)定情況下,對主標(biāo)題字體的放大倍數(shù)。 -
cex.sub。表示在當(dāng)前的cex設(shè)定情況下,對子標(biāo)題字體的放大倍數(shù)。 -
cin。這是一個(gè)只讀參數(shù),不能進(jìn)行修改。以形式(width,height)返回字體大小,單位為英寸。這和參數(shù)cra的作用一樣,只是測量單位不同。 -
col。用于設(shè)定默認(rèn)的繪圖顏色(無可否認(rèn)這是一個(gè)非常特別的參數(shù),以后會總結(jié)博文專門討論如何設(shè)定顏色 )。 col.axis。坐標(biāo)軸刻度值的顏色,默認(rèn)為"black"。如代碼:
>
par(cex.axis=3,col.axis="red")
> plot(1:4)
col.lab。坐標(biāo)軸名稱的顏色,默認(rèn)為"black"。col.main。主標(biāo)題的顏色,默認(rèn)為"black"。col.sub。子標(biāo)題的顏色,默認(rèn)為"black"。cra。參見參數(shù)cin的說明。-
crt。該參數(shù)的值為一個(gè)表示度數(shù)的數(shù)值,用于表示單個(gè)字符的旋轉(zhuǎn)度數(shù),最好為90的倍數(shù)。和參數(shù)srt的不同之處在于后者是對整個(gè)字符串進(jìn)行旋轉(zhuǎn)。 csi。只讀參數(shù),返回默認(rèn)的字符高度,以英寸為單位。-
cxy。只讀參數(shù),以形式(width,height)返回默認(rèn)的字符寬度、高度,其中par("cxy")=par("cin")/par("pin")。 -
din。只讀參數(shù),表示繪圖設(shè)備的尺寸規(guī)格,以形式(width,height)返回,單位為英寸。 family。圖形中字符的字體類型。最大的長度為200
bytes。默認(rèn)值為"",表示采用繪圖設(shè)備的默認(rèn)字體。-
fg。圖形中顯著位置的顏色(如坐標(biāo)軸、刻度線,邊框等),一般默認(rèn)為"black"。 fig。一個(gè)數(shù)值向量,形式為c(x1, x2, y1,
y2),用于設(shè)定當(dāng)前圖形在繪圖設(shè)備中所占區(qū)域,注意需要滿足x1<x2,y1<y2。如果修改參數(shù)fig,會自動(dòng)打開一個(gè)新的繪圖設(shè)備,而若希望在原來的繪圖設(shè)備中添加新的圖形,需要和參數(shù)new=TRUE一起使用。如代碼:
> par(fig=c(0,0.5,0,0.5))
> plot(1:3)
> par(fig=c(0.5,1,0.5,1))
> plot(1:3)
>
par(fig=c(0,0.5,0,0.5),new=TRUE)
> plot(1:3)
-
fin。當(dāng)前繪圖區(qū)域的尺寸規(guī)格,形式為(width,height),單位為英寸。如果修改了這個(gè)參數(shù)的值,默認(rèn)為啟動(dòng)一個(gè)新的繪圖設(shè)備。
-
font。用于設(shè)定采用哪種字型,為一個(gè)整數(shù)。1代表純文本(默認(rèn)值),2表示黑體,3表示斜體,4表示黑色斜體。在Adobe字符編碼下,5也可以。
-
font.axis。坐標(biāo)軸刻度值的字型。
-
font.lab。坐標(biāo)軸名稱的字型。
-
font.main。主標(biāo)題的字型。
-
font.sub。子標(biāo)題的字型。
-
lab。以形式c(x,y,len)表示的數(shù)值型向量,用于對坐標(biāo)軸的名稱進(jìn)行設(shè)定。值x和y用于設(shè)定x和y軸上的刻度線的個(gè)數(shù),而len設(shè)定了刻度線的長度(目前R中這個(gè)值是沒有效應(yīng)的)。
-
las。只能是0,1,2,3中的某一個(gè)值,用于表示刻度值的方向。0表示總是平行于坐標(biāo)軸;1表示總是水平方向;2表示總是垂直于坐標(biāo)軸;3表示總是垂直方向。
-
lend。線段的端點(diǎn)樣式,參數(shù)值可以為一個(gè)整數(shù)或者一個(gè)字符串。參數(shù)值為0或者"round"時(shí),表示端點(diǎn)樣式為圓角(默認(rèn)值);為1或者"butt"時(shí),表示端點(diǎn)直接截?cái)?;?或者"square"表示延伸末端。如代碼:
>
plot(1:8,type="n",ylim=c(1,6))
> x0<-c(1,2,3,5,6)
> y0<-rep(1,5)
> x1<-x0
> y1<-rep(6,5)
> segments(x0,y0,x1,y1)
> x0<-rep(0,4)
>
y0<-seq(1.3,4.3,1)
> x1<-c(1,6,3,1)
> y1<-y0
#默認(rèn)情形
>
segments(x0,y0,x1,y0,lwd=10,col="red")
#修改參數(shù)lend=1
>
y0<-seq(1.6,4.6,1)
> y1<-y0
>
segments(x0,y0,x1,y0,lwd=10,col="green",lend=1)
#修改參數(shù)lend=2
>
y0<-seq(1.9,4.9,1)
> y1<-y0
> x0<-x1
> x1<-c(2,8,5,3)
>
segments(x0,y0,x1,y0,lwd=10,col="blue",lend=2)
-
lty。直線類型。參數(shù)的值可以為整數(shù)(0為空,1為實(shí)線(默認(rèn)值),2為虛線,3為點(diǎn)線,還可以為4、5、6等),也可以為字符串(和整數(shù)是一一對應(yīng)的,如"blank"、"solid"、"dashed"、"dotted"、"dotdash"、"longdash"或者
"twodash")。
-
lwd。線條寬度。必須為一個(gè)整數(shù),默認(rèn)值為1。具體的實(shí)現(xiàn)根據(jù)設(shè)備而定,有一些繪圖設(shè)備不支持線條寬度小于1。
-
mfcol,mrow。用于設(shè)定圖像設(shè)備的布局(簡單的說就是將當(dāng)前的繪圖設(shè)備分隔成了nr*nc個(gè)子設(shè)備),參數(shù)形式為c(nr,
nc)。子圖的繪圖順序是按列還是按行就分別根據(jù)是參數(shù)指定的是mfcol還是mfrow。想要實(shí)現(xiàn)相同的功能還可以利用函數(shù)layout或者split.screen。
-
mgp。設(shè)定標(biāo)題、坐標(biāo)軸名稱、坐標(biāo)軸距圖形邊框的距離。默認(rèn)值為c(3,1,0),其中第一個(gè)值影響的是標(biāo)題。
-
new。邏輯值,默認(rèn)值為FALSE。如果設(shè)定為TRUE,那么下一個(gè)高級繪圖命令并不會清空當(dāng)前繪圖設(shè)備。
-
oma。參數(shù)形式為c(bottom, left, top, right) ,用于設(shè)定外邊界。
-
omi。和參數(shù)oma的作用一樣,只是這次參數(shù)的單位為英寸。
-
pch。表示點(diǎn)的形狀,它的值可以為數(shù)值型(介于0到25之間的數(shù)值),也可以為字符型。1代表圓圈,2代表三角形,3代表“+”號。當(dāng)pch的值為字符型時(shí),那么點(diǎn)就通過該字符來表示。
-
pin。當(dāng)前的維度,形式為c(width,height),單位為英寸。
-
plt。形式為 c(x1, x2, y1, y2),設(shè)定當(dāng)前的繪圖區(qū)域。
-
pty。一個(gè)字符型參數(shù),表示當(dāng)前繪圖區(qū)域的形狀,"s"表示生成一個(gè)正方形區(qū)域,而"m"表示生成最大的繪圖區(qū)域。
-
srt。字符串旋轉(zhuǎn)度數(shù),只支持函數(shù)text。
-
tck??潭染€的長度,為一個(gè)小于等于的小數(shù),表示繪圖區(qū)域的高度或?qū)挾鹊囊徊糠郑ㄈ「叨然驅(qū)挾戎休^小的值)。如果tck=1,則表示繪制網(wǎng)格線。默認(rèn)值為NA(相當(dāng)于tcl=-0.5)。
-
tcl。同樣可用于設(shè)定刻度線的長度,但是和tck的單位不同。它的默認(rèn)值為-0.5。
-
usr。一個(gè)形式為c(x1, x2, y1, y2)的向量,表示當(dāng)前繪圖區(qū)域的坐標(biāo)值范圍:c(xleft, xright,
ybottom,
ytop)。如果采用的對數(shù)刻度(如par("xlog")=TRUE),那么x坐標(biāo)軸的表示范圍為10^par("usr")[1:2],同樣也可以得到y(tǒng)坐標(biāo)軸的表示范圍。
-
xaxp。一個(gè)形式為c(x1, x2,
n)的向量,表示當(dāng)par("xlog")=false時(shí),x坐標(biāo)軸的刻度線的區(qū)間及區(qū)間中的刻度線個(gè)數(shù)。若par("xlog")=TRUE,情形就稍微復(fù)雜了:若取值范圍較小,那么n是一個(gè)負(fù)數(shù),且刻度線的分布和正常情形(沒有對數(shù)轉(zhuǎn)換)下相似;若n取值為1、2、3中的一個(gè),c(x1,x2)=10^par("usr")[1:2](并且此時(shí)par("usr")是指par("xlog")=TRUE情況下返回的值)。具體解釋如下:
n=1,在坐標(biāo)值為10^j(j為整數(shù))處繪制刻度線。
n=2,在坐標(biāo)值為k*(10^j)處繪制刻度線,其中k為1或者5。
n=3,在坐標(biāo)值為k*(10^j)處繪制刻度線,其中k為1、2或者5。
-
yaxp。同xaxp類似,表示y坐標(biāo)軸的刻度線的區(qū)間及區(qū)間中的刻度線個(gè)數(shù)。
-
xaxs。坐標(biāo)軸x的間隔設(shè)定方式。取值范圍為:"r", "i",
"e", "s",
"d"。一般來說,計(jì)算方式是由xlim的數(shù)值范圍確定的(如果xlim指定了的話)。"r"(regular)首先會對數(shù)值范圍向兩端各延伸4%,然后在延伸后的數(shù)值區(qū)間中設(shè)置坐標(biāo)值;"i"(internal)直接在原始的數(shù)據(jù)范圍中設(shè)置坐標(biāo)值;"s"(standard)和"e"(extended)、;"d"(direct)目前還不支持。
-
yaxs。類似于xaxs,對坐標(biāo)軸y的間隔設(shè)定方式。
-
xaxt。用于設(shè)定x坐標(biāo)軸的刻度值類型,為一個(gè)字符。"n"表示不繪制刻度值及刻度線;"s"表示繪制,默認(rèn)值。
-
yaxt。類似于xaxt。
-
xlog。一個(gè)邏輯值。如果為TRUE,表示對x軸為對數(shù)坐標(biāo)軸,默認(rèn)值為FALSE。
-
ylog。類似于xlog。
最后,說明一點(diǎn):如何設(shè)定顏色?R提供了很多和顏色相關(guān)的函數(shù)供我們調(diào)用,如colors()、palette()、rainbow()、rgb()、gray()、hsv()、hcl()等等。以后也會對“如何設(shè)定顏色”這一問題進(jìn)行整理,并且接下來關(guān)于R語言的博文也會重點(diǎn)關(guān)注于可視化方面,包括如何繪制散點(diǎn)圖、條形圖、熱點(diǎn)圖、地圖等。
|