R語言與醫學統計圖形【1】par函數


張鐵軍,陳興棟等 著

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窗口面積。
    image.png

坐標軸、標題等元素在圖形區域,而非繪圖區域。這個參數作用就是實現設定繪圖區域大小,方面我們在繪圖區域外部添加額外內容。

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關閉繪圖框。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM