graphics | 基础绘图系统的拼图方法之三:使用mfrow、mfcol参数和layout函数

R的基础绘图功能是个自成体系的系统,尽管有许多工具包可以“一行代码绘制一幅图”,但是小编仍然认为系统地学习基础功能非常重要。

本篇推文是为了补全关于基础绘图系统的拼图功能的介绍,前面已经介绍了两种方法:

在阅读本篇推文之后,相信读者可以总结出不同方法的使用情境,进而迁移到ggplot2绘图系统的相关功能上。

mfrow/mfcol

这两个参数只能在par()函数中使用,对之后的绘图函数起作用。参数赋值形式如下:

par(mfrow = c(m, n))
par(mfcol = c(m, n))

以上代码表示,在一个绘图页面中绘制m行、n列个尺寸相同的图形;当图形铺满页面后(即图形数目达到m*n个)再新建绘图页面,并重复上述操作。

  • 在排列图形顺序时,mfrow参数是先从左到右、再从上到下,即按行排列;mcol参数是先从上到下、再从左到右,即按列排列;

  • 默认情况下,m和n的取值都是1,因此是一幅图形占据一个绘图页面;若想停止拼图,则要么将m和n重新设置为1,要么重启R。

x <- seq(-1, 0, 0.01)
y <- sqrt(1 - x^2)
par(mfrow = c(2,2))
plot(x, y)
plot(-x, y)
plot(x, -y)
plot(-x, -y)

将上述代码中的mfrow参数替换成mfcol参数,其他不变,效果如下:

x <- seq(-1, 0, 0.01)
y <- sqrt(1 - x^2)
par(mfcol = c(2,2))
plot(x, y)
plot(-x, y)
plot(x, -y)
plot(-x, -y)
x <- seq(-1, 0, 0.01)
y <- sqrt(1 - x^2)
par(mfrow = c(2,2), plt = c(0,1,0,1),
    xaxs = "i", yaxs = "i")
plot(x, y, ann = F)
plot(-x, y, ann = F)
plot(x, -y, ann = F)
plot(-x, -y, ann = F)

layout()

layout()函数是mfrowmfcol参数功能的拓展版。它在排列图形时不再局限于尺寸大小必须相同、页面必须铺满。

语法结构如下:

layout(mat, widths = rep.int(1, ncol(mat)),
       heights = rep.int(1, nrow(mat)),
       respect = FALSE)
  • mat:矩阵;元素表示该位置的图形编号,其中0表示该位置不绘制图形;

  • widths、heights:各列的宽和各行的高(可以为绝对值,也可以为相对值)。

对于如下矩阵:

mat <- matrix(c(3,3,1,2), 2, 2,
              byrow = T)
mat
##      [,1] [,2]
## [1,]    3    3
## [2,]    1    2

默认尺寸是等宽等高的,它对应的图形布局如下:

layout.show(layout(mat))

通过widthsheights参数修改各子图的尺寸:

layout.show(layout(mat, widths = c(2,1),
                   heights = c(2,3)))

上述图中的数字即图形的编号,边框内为相应图形的绘制范围:

layout(mat, widths = c(2,1), heights = c(2,3))
set.seed(123)
opar <- par(no.readonly = TRUE)
x <- factor(rep(c(1,2), 50))
y <- rnorm(100)
hist(y)
plot(x, y)
par(plt = c(0.10, 0.96, 0.17, 0.95), mgp = c(2,1,0))
plot(1:100, y, ann = F)
par(opar)
  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值