You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存par(mfrow)与lapply生成的多组组合直方图?

解决用lapply保存par(mfrow)组合直方图的问题

你的核心问题是每次循环都遍历了所有列,导致每个PNG都只保留最后一组的布局。要实现每组2个直方图的组合保存,且不用for循环和if语句,可以按以下步骤处理:

步骤1:将列索引分组

先把mtcars的列索引分成每组2个的列表,用split函数即可实现:

# 把列索引按每组2个拆分
col_groups <- split(1:ncol(mtcars), ceiling(1:ncol(mtcars)/2))

这会生成一个包含6个元素的列表(因为mtcars有11列),前5组各2个索引,最后1组1个索引。

步骤2:用lapply遍历分组并保存图片

遍历每个分组,为每个分组单独打开PNG设备,绘制对应列的直方图后关闭设备:

lapply(seq_along(col_groups), function(i) {
  # 生成带编号的PNG文件名
  png(paste0("../Desktop/histogram_", i, ".png"), width = 800, height = 400)
  # 设置1行2列的布局
  par(mfrow = c(1, 2), mar = c(4,4,2,1)) # mar参数可调整边距,优化显示效果
  # 绘制当前分组内的所有直方图
  lapply(col_groups[[i]], function(x) {
    hist(mtcars[, x], main = colnames(mtcars)[x], xlab = colnames(mtcars)[x])
  })
  # 关闭绘图设备,完成保存
  dev.off()
})

代码说明

  • seq_along(col_groups)用来获取分组的序号,作为PNG文件的编号,避免覆盖。
  • 每个分组只绘制对应列的直方图,不会重复遍历所有列,因此每个PNG只会保存当前组的1-2个直方图组合。
  • 可以通过调整png函数的width和height参数,以及par的mar参数优化图片的显示效果。

内容的提问来源于stack exchange,提问作者emr2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:36:17