张铁军,陈兴栋等 著
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
关闭绘图框。