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

如何将R语言中by函数生成的多幅绘图合并至同一画布

解决按因子分组绘制多数值列的问题

我来帮你搞定这个绘图需求!先梳理下你的代码里的小问题:你重复赋值了varB(应该是笔误),而且mainVar里的dof大概率是dog的拼写错误,还有by()里的函数没写完。下面给你两种实用的解决方案,分别用基础R和ggplot2实现:

先修正你的数据生成代码

首先把数据部分的小错误改掉,确保数据是正确的:

# 生成模拟数据,修正笔误
varA <- runif(40)
varB <- runif(40)
varC <- runif(40)
mainVar <- c(rep('cat', 10), rep('dog', 10), rep('mouse', 10), rep('frog', 10))
plotData <- data.frame(varA, varB, varC, mainVar)

方案1:用基础R快速绘图

如果你习惯用基础R,我们可以利用循环和par()布局来实现。这里以箱线图为例(你也可以换成直方图、密度图等):

# 打开pdf设备,设置2行2列的画布
pdf('asd.pdf')
par(mfrow = c(2,2))

# 循环每个数值列,按因子分组绘图
for(col_name in c("varA", "varB", "varC")){
  boxplot(plotData[[col_name]] ~ plotData$mainVar,
          main = paste("分组对比:", col_name),
          xlab = "分组", ylab = col_name,
          col = rainbow(4)) # 给每个分组加颜色
}

# 关闭pdf设备
dev.off()

这个方案会生成一张2x2布局的图,前三个位置是三个数值列的分组箱线图,第四个位置留空,刚好符合你的布局需求。

方案2:用ggplot2绘制更美观的分面图

如果想要更美观、易调整的可视化结果,ggplot2是更好的选择。我们先把数据转成长格式,再用分面功能实现:

library(ggplot2)
library(tidyr)

# 把宽格式数据转成长格式,方便分面绘图
plotData_long <- pivot_longer(plotData, 
                              cols = c(varA, varB, varC),
                              names_to = "变量名称", 
                              values_to = "数值")

# 生成分面箱线图
ggplot(plotData_long, aes(x = mainVar, y = 数值, fill = mainVar)) +
  geom_boxplot(alpha = 0.7) + # 半透明填充
  facet_wrap(~ 变量名称, ncol = 2) + # 按变量分面,2列布局
  theme_bw() + # 简洁的主题
  labs(title = "各数值列按因子分组分布",
       x = "分组", y = "数值") +
  theme(legend.position = "none") # 去掉重复的图例

# 保存为pdf
ggsave("asd.pdf", width = 8, height = 6, dpi = 300)

这个方案的图更专业,而且可以轻松调整颜色、主题、分面布局,适合需要展示的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:22:06