張鐵軍,陳興棟等 著
R語言基礎繪圖系統
基礎繪圖包之高級繪圖函數——par函數
基礎繪圖包並非指單獨某個包,而是由幾個R包聯合起來的一個聯盟,比如graphics、grDevices等。
掌握par函數(作為20個主要統計圖形函數之一)的主要參數。?par
-
adj 微調圖中字符位置。adj=c(x,y),相對左下角坐標點,一般不超過1。
-
bg 繪圖區域背景色。
par(bg="green")
-
bty 設置圖形邊框樣式。包含
o, l , 7, c, u, ]
可選。
bty <- c('o', 'l' , '7', 'c', 'u', ']')
par(mfrow=c(3,2)) #切分畫布
for(i in 1:6){
par(bty=bty[i])
plot(1:5,main=paste("the bty is",bty[i],sep = ':'))
}
-
cex 設置圖上元素,如文字或符號的縮放倍數。
plot(1:5, cex=1:5)
。衍生參數:cex.lab, cex.main, cex.sub, cex.axis
. -
col 設置元素顏色。
-
family 文本字體。包括
serif, sans, mono, symbol
。如par(family='serif')
即為醫學科研論文中常用的times new roman字體。 -
font 字體樣式。包括
1, 2, 3, 4
分別為正常,粗體,斜體和粗斜體。 -
las 坐標軸刻度標簽樣式。包括
0,1,2,3
,分別為平行於坐標軸,水平,垂直於坐標軸,垂直。 -
lty 線條樣式。包括
0,1,2,3,4,5,6
,分別為不划線,實線,虛線,點線,點划線,長划線,點長划線。 -
lwd 線條寬度。用法類似cex。注意:當在par函數中使用lwd時,圖形中所有元素(如線條,坐標軸,邊框等)的線寬都會改變;若只需圖中線條寬度變化,需將lwd加入繪圖函數中。
#全局設置線寬
par(mfrow=c(2,3))
for(i in 1:6){
par(lty=i,lwd=i) #設置不同線型和線寬
plot(1:5,type = 'l',main = paste('the lty is',i,sep = ':'),
sub = paste('the lwd is',i,sep = ':'))
}
#僅設置線條寬度
plot(rnorm(50),type = 'l',lwd=2,main = "圖中線條寬度為默認的2倍")
-
mar和mai 設置圖形邊界空白寬度,用於控制繪圖面積大小。接受4個數值向量,分別為圖形下、左、上、右的邊界寬度。前者默認
c(5,4,4,2)+0.1
,單位為線寬,后者單位為英寸。 -
mfrow和mfcol 畫布切割。2個元素,幾行幾列組合。
-
mgp 坐標軸到畫布邊緣的距離。后接3個元素分別表示坐標軸標題、刻度標簽、坐標軸線到圖形的距離,默認
mgp=c(3,1,0)
-
pch 點的形狀。包括25種,即
1-25
,其中15-20
可進行顏色填充。
plot(rep(1:5,times=5),rep(1:5,each=5),pch=1:25,
cex=1.5, bty='l', xlim = c(1,5.4),
xlab = '',ylab = '',main = '25種不同點型')
#低級繪圖函數,圖中添加文本
text(rep(1:5,times=5)+0.15,rep(1:5,each=5),
labels = 1:25, col = 'red')
- srt 圖中字符串旋轉角度。
plot(1:25,pch=1)
text(x=c(5,10,20),y=c(7,15,10),col = 'red',
labels = c("R","China","Love"),
srt=30)
- tck和tcl 設置坐標軸刻度線的高度。tck是與圖形寬度和高度的比例值(-1到1之間),tcl是與文本行高的比例值。負值表坐標軸刻度向外,正值表示向內。
par(mfrow=c(1,2))
plot(1:10,tck=0.03,main = 'tck=0.03') #刻度線朝內
plot(1:10,tck=-0.03,main = 'tck=-0.03') #刻度線朝外
-
usr 限定畫布大小,
usr=c(x1,x2,y1,y2)
,分別表示x軸左、右極限,y軸的下、上極限的矩形區域。 -
xaxt和yaxt 設置坐標軸樣式,默認標准樣式為
s
。若不需要坐標軸或需自定義坐標軸,可設置n
,即不繪制刻度及標簽,但仍有一條刻度線。 -
xlog和ylog 坐標軸取值log轉換。
-
fig 取值
fig=c(x1,x2,y1,y2)
,配合new=TRUE
參數,用於在當前圖形上添加新的圖形。
x <- rnorm(1000)
#QQ圖
qqnorm(x)
#添加正態擬合線
qqline(x,col="red")
#設置參數,新圖形位置
op <- par(fig=c(0.02,0.5,0.5,0.98),new=TRUE)
#0.02表示新圖形左邊框與原圖左邊框的距離是原圖寬度的2%
#0.5表示新圖形右邊框與原圖左邊框的距離是原圖寬度的50%
#0.5表示新圖形下邊框......下................高度的50%
#0.98表示.....上..........下......................98%
#繪制新圖形直方圖
hist(x,probability = T,col = 'light blue',
xlab='',ylab='',main = '',axes = F)
#添加概率密度曲線
lines(density(x),col="red",lwd=2)
#新圖形加邊框
box()
#釋放par參數
par(op)
- xpd 設置繪圖區域大小。包括
TRUE, FALSE, NA
,FALSE代表繪圖區域,即圖形中點線條等元素所占面積;TRUE代表圖形區域,即圖形占地面積;NA代表設備區域,即Rstudio中的plots窗口面積。
坐標軸、標題等元素在圖形區域,而非繪圖區域。這個參數作用就是實現設定繪圖區域大小,方面我們在繪圖區域外部添加額外內容。
par(omi=c(0.1,0.1,0.2,0.2),mai=c(2,2,1,2),xpd=NA)
#omi參數定義圖形區域與設備區域間的距離(英寸)。
#mai參數定義繪圖區域與圖形區域間的距離(英寸)。
plot(1:10)
text(3,-5,'繪圖區域外添加的文字')
text(-0.5,12,'A',cex = 3,family='serif')
科研論文中版面圖(panel plot)的應用:即一張畫布分布多張圖。
#上下排布
#圖A,上半邊繪圖區域
par(omi=rep(0,4),mai=c(3.5,1,1,1),xpd=NA)
plot(1:10)
text(-0.5,12,'A',cex = 2,family='serif')
#圖B,下半邊繪圖區域
par(new=TRUE,mai=c(1,1,3.5,1))
plot(1:10)
text(-0.5,12,'B',cex=2,family='serif')
#左右排布
#mai下左上右
#圖A,左半邊繪圖區域
par(omi=rep(0,4),mai=c(1,1,1,5),xpd=NA)
plot(1:10)
text(-0.5,12,'A',cex = 2,family='serif')
#圖B,右半邊繪圖區域
par(new=TRUE,mai=c(1,5,1,1))
plot(1:10)
text(-0.5,12,'B',cex=2,family='serif')
- ask 邏輯參數。設為TRUE時,一次展示一張畫布顯示一張圖。若為FALSE,所有圖一閃而過。
以上par函數的22個參數較為常用。大部分可直接在高級繪圖函數中使用,等同par()使用;部分參數只能在par中設置和使用,包括ask, fig, fin ,lheight, mai, mar, mfcol, mfrow, mfg, new, oma, omd, omi, pin, plt, ps, pty, usr, xlog, ylog
。
注意:
par函數對圖形參數的改變是永久性的,即在R關閉前,par函數對每張圖都起作用。以下方法解決永久性改變問題:
- 1.將所有參數保存為一個實名對象,待圖形繪制完畢后,再釋放實名對象。
op <- par(fig=c(0.02,0.5,0.5,0.98),new=TRUE)
hist(x,probability = T,col = 'light blue',
xlab='',ylab='',main = '',axes = F)
lines(density(x),col="red",lwd=2)
box()
#釋放par參數
par(op)
- 2.圖形繪制完成后,調用
dev.off
關閉繪圖框。