每天学习一点R:11.绘图区域设置
绘图区域设置
昨天讲解了应用plot函数进行绘图及其绘图参数,在开始绘制一张图像之前,首先要做的就是定义绘图区域,以确定图像绘制的位置及各个元素的分布。
par()函数中除了用于绘图元素的参数之外,还有一些是针对绘图区域设置的参数。
mai,数字向量,格式为c(bottom, left, top, right),以英寸为单位定义绘图区边缘空白大小。
mar,数字向量,格式为c(bottom, left, top, right),给出各个方向绘图区边缘空白的大小,默认为c(5, 4, 4, 2) + 0.1。
mfg,c(i,j)形式的数字向量,定义在一个图标列阵中,哪一个位置是下一个图的生成位置。
new,逻辑值,默认值为FALSE,如果设定为TRUE,那么下一个高级绘图命令会清空当前绘图设备。
oma、omi,参数形式为c(bottom, left, top, right) ,用于设定外边界。
page,定义是否下一个图形生成在一个新的页面。
plt,形式为 c(x1, x2, y1, y2),设定当前的绘图区域。
pty,一个字符型参数,表示当前绘图区域的形状,”s”表示生成一个正方形区域,而”m”表示生成最大的绘图区域。
xpd,如为FALSE,则所有的内容均在plot区域中显示,即坐标轴以内,如为TRUE,则所有的内容在绘图区显示,及margin内,如果NA,则所有的内容在任何区域均可。
mai与mar以及oma和omi之间的区别只是所用的单位不同。
通常情况下常用的参数只有mar和xpd,在进行图像绘制之前输入如下命令:
par(mar = c(4,2,2,1),xpd = TRUE)
mar设置绘图区域边界大小,xpd图像元素可以在边界内出现,如果xpd为FLASE,可能会导致部分图像显示不全。
页面布局
在很多情况下,我们都希望在一副图中展示多个图像,这就涉及到对绘图区域进行分隔和布局。
par()函数中的mfcol、mfrow,用于设定图像设备的布局,参数形式为c(nr, nc),子图的绘图顺序是按列还是按行就分别根据是参数指定的是mfcol还是mfrow。
par(mfcol = c(3,3))
par(mfrow = c(3,3))
mfcol和mfrow设置绘图区域的布局有一个问题,就是只能将绘图区域分成大小相等的子区域,但是我们可能希望不同的子图像所占据的绘图区域大小不一致,这时可以使用layout()函数。
layout(mat, widths = rep.int(1,ncol(mat)),
heights = rep.int(1,nrow(mat)),respect = FALSE)
参数详解:
mat,layout通过一个矩阵设置绘图窗口的划分;
widths,设置不同列的宽度;
heights,设置不同行的高度。
mat矩阵应用整数指定绘图区域划分和绘制的先后顺序,0表示该位置不画图,其它数值必须为从1开始的连续整数。
layout(matrix(1:6,2,3))
默认条件下,layout同样是将绘图区平均划分。
layout(matrix(c(1,2,3,0,2,3,0,0,3),nr = 3))
通过0元素和其它数值的重复定义不同绘图区的形状。
layout(matrix(1:4,2,2),widths = c(1,2),heights = c(2,1))
通过widths和heights定义不同行和列的长宽比。
扩展阅读