微信登录

高级绘图 - 多图绘制 - 在同一画布绘制多图

高级绘图 - 多图绘制 - 在同一画布绘制多图

在数据分析和可视化过程中,有时我们需要在同一画布上展示多个图形,以便更全面地呈现数据的特征和关系。R 语言提供了多种方法来实现这一目标,本文将详细介绍几种常见的在同一画布绘制多图的方法,并通过演示代码展示其使用。

1. par() 函数

par() 函数是 R 语言中一个非常强大的图形参数设置函数,通过设置 mfrowmfcol 参数,我们可以将画布划分为多个子图区域。

1.1 mfrow 参数

mfrow 参数用于按行填充子图,即先填满一行,再填充下一行。

  1. # 生成示例数据
  2. x <- 1:10
  3. y1 <- x^2
  4. y2 <- x^3
  5. y3 <- sqrt(x)
  6. y4 <- log(x)
  7. # 设置画布为 2 行 2 列的布局
  8. par(mfrow = c(2, 2))
  9. # 绘制第一个图
  10. plot(x, y1, main = "y = x^2", type = "l")
  11. # 绘制第二个图
  12. plot(x, y2, main = "y = x^3", type = "l")
  13. # 绘制第三个图
  14. plot(x, y3, main = "y = sqrt(x)", type = "l")
  15. # 绘制第四个图
  16. plot(x, y4, main = "y = log(x)", type = "l")
  17. # 恢复默认的图形参数
  18. par(mfrow = c(1, 1))

1.2 mfcol 参数

mfcol 参数用于按列填充子图,即先填满一列,再填充下一列。

  1. # 设置画布为 2 行 2 列的布局,按列填充
  2. par(mfcol = c(2, 2))
  3. # 绘制第一个图
  4. plot(x, y1, main = "y = x^2", type = "l")
  5. # 绘制第二个图
  6. plot(x, y2, main = "y = x^3", type = "l")
  7. # 绘制第三个图
  8. plot(x, y3, main = "y = sqrt(x)", type = "l")
  9. # 绘制第四个图
  10. plot(x, y4, main = "y = log(x)", type = "l")
  11. # 恢复默认的图形参数
  12. par(mfcol = c(1, 1))

2. layout() 函数

layout() 函数提供了更灵活的画布布局方式,我们可以自定义每个子图的大小和位置。

  1. # 定义布局矩阵,每个数字代表一个子图的编号
  2. layout_matrix <- matrix(c(1, 1, 2, 3), nrow = 2, byrow = TRUE)
  3. # 设置布局
  4. layout(layout_matrix)
  5. # 绘制第一个图
  6. plot(x, y1, main = "y = x^2", type = "l")
  7. # 绘制第二个图
  8. plot(x, y2, main = "y = x^3", type = "l")
  9. # 绘制第三个图
  10. plot(x, y3, main = "y = sqrt(x)", type = "l")
  11. # 恢复默认布局
  12. layout(matrix(1))

3. gridExtra

gridExtra 包提供了 grid.arrange() 函数,可以方便地将多个 ggplot2 图形组合在一起。

  1. # 安装并加载 gridExtra 和 ggplot2 包
  2. if (!require(gridExtra)) install.packages("gridExtra")
  3. if (!require(ggplot2)) install.packages("ggplot2")
  4. library(gridExtra)
  5. library(ggplot2)
  6. # 创建 ggplot2 图形
  7. p1 <- ggplot(data.frame(x = x, y = y1), aes(x = x, y = y)) +
  8. geom_line() +
  9. ggtitle("y = x^2")
  10. p2 <- ggplot(data.frame(x = x, y = y2), aes(x = x, y = y)) +
  11. geom_line() +
  12. ggtitle("y = x^3")
  13. p3 <- ggplot(data.frame(x = x, y = y3), aes(x = x, y = y)) +
  14. geom_line() +
  15. ggtitle("y = sqrt(x)")
  16. p4 <- ggplot(data.frame(x = x, y = y4), aes(x = x, y = y)) +
  17. geom_line() +
  18. ggtitle("y = log(x)")
  19. # 将四个图形组合在一起
  20. grid.arrange(p1, p2, p3, p4, nrow = 2, ncol = 2)

总结

方法 优点 缺点 适用场景
par() 函数 简单易用,是 R 语言内置函数,无需额外安装包 布局相对固定,灵活性较差 简单的多图布局,对子图大小和位置要求不高
layout() 函数 可以自定义子图的大小和位置,布局灵活 代码相对复杂,需要手动定义布局矩阵 需要复杂布局的多图绘制
gridExtra ggplot2 包配合使用,方便组合多个 ggplot2 图形 需要安装额外的包 使用 ggplot2 进行绘图,需要组合多个图形

通过以上几种方法,我们可以在 R 语言中轻松实现同一画布上的多图绘制,根据具体需求选择合适的方法可以让我们的可视化效果更加出色。