使用par(mfrow=c(1,2))无法并排显示两张图,仅输出最后一张图
问题解决方法
你的问题出在同时混用了两种绘图布局方式:par(mfrow)和print()的position参数,而且调用plot(effect(...))时已经自动绘制了图形,后续的print()操作又覆盖了之前的输出。
方案一:仅使用print()的布局参数
修改代码,在调用plot()时加上plot=FALSE,让它只返回图形对象而不直接绘制,再通过print()的position和more参数控制布局:
# 先关闭par(mfrow)的设置,避免冲突 par(mfrow=c(1,1)) # 生成图形对象但不绘制 a <- plot(effect(fit.no_interaction, term="WEEK", confidence.level = 0.95, residuals=T), colors="blue", band.colors="red", band.transparency=0.3, rug=F, cex=5, residuals.color=adjustcolor("cornflowerblue", alpha.f=0.2), residuals.pch=16, smooth.residuals=F, plot=FALSE) # 关键:不直接绘图 b <- plot(effect(fit.interaction, term="YEAR", confidence.level = 0.95, residuals=T), colors="blue", band.colors="red", band.transparency=0.3, rug=F, cex=5, residuals.color=adjustcolor("cornflowerblue", alpha.f=0.2), residuals.pch=16, smooth.residuals=F, plot=FALSE) # 按位置打印,more=TRUE表示后面还有图要画 print(a, position = c(0, 0, 0.5, 1), more = TRUE) print(b, position = c(0.5, 0, 1, 1))
方案二:仅使用par(mfrow)布局
直接利用par(mfrow)的子图布局,不需要赋值和print(),因为effect的绘图函数会自动适配当前布局:
par(mfrow=c(1,2)) # 设置1行2列的子图 # 直接绘制第一张图 plot(effect(fit.no_interaction, term="WEEK", confidence.level = 0.95, residuals=T), colors="blue", band.colors="red", band.transparency=0.3, rug=F, cex=5, residuals.color=adjustcolor("cornflowerblue", alpha.f=0.2), residuals.pch=16, smooth.residuals=F) # 直接绘制第二张图,会自动填充到第二个子图位置 plot(effect(fit.interaction, term="YEAR", confidence.level = 0.95, residuals=T), colors="blue", band.colors="red", band.transparency=0.3, rug=F, cex=5, residuals.color=adjustcolor("cornflowerblue", alpha.f=0.2), residuals.pch=16, smooth.residuals=F) # 可选:恢复默认布局 par(mfrow=c(1,1))
两种方案选其一即可,推荐方案二,更简洁直观。
内容的提问来源于stack exchange,提问作者Fruuutz
相关产品推荐
相关产品推荐

