在一行 / 网格中绘制多个未使用 ggplot 创建的图表

3

我创建了两个绘图,p1 和 p10,并记录如下:

plot(data$Fwd_EY, data$SPNom1YrFwdRet, pch = 16, cex = 1.0, col = "blue")
p1 <- recordPlot()
dev.off()

plot(data$Fwd_EY, data$SPNom10YrFwdRet, pch = 16, cex = 1.0, col = "blue")
p10 <- recordPlot()
dev.off()

我将P1和P10打印成.png文件,然后希望在将它们打印到单个.png文件之前并排查看两个图。我尝试了以下多种变化,但都没有成功。
myPlots = c(p1, p10)
ggarrange(plotlist = myPlots, nrow = 1)

par(mfrow=c(1,2))
p1
p10

nf <- layout( matrix(c(1,2), ncol=1) )
p1
p10

在某些情况下,R似乎需要使用ggplots进行绘图。在其他情况下,图表会以全屏方式打印。我该如何实现我的目标?
先感谢你。
Thomas Philips

这个有帮助吗?链接 - Limey
确实如此,感谢您的指点,但将记录的图形写成.png文件,然后将其读回并进行光栅化似乎是浪费的。肯定有更简单的方法!另外,我正在记录这些图形,因为我将散点图与最佳拟合线重叠,并且在保存整个图像时遇到了困难。因此,虽然我绝对不希望成为一个忘恩负义的人(您的解决方案确实解决了我的问题),但看起来我正在朝着一系列麻烦的黑客行为的兔子洞走去,而这个问题表面上看起来相当简单! - Thomas Philips
你是说在工作流程中你先创建PNG文件而不是由外部来源提供它们?那么我非常有信心可以从原始数据中获得您想要的输出。您能否提供一个包含源数据、期望输出和相关代码的reprex? - Limey
plot(data$Fwd_EY, data$SPNom1YrFwdRet, pch = 16, cex = 1.0, col = "blue") predict_ret_1l <- predict(fit_1l, data) predict_ret_1q <- predict(fit_1q, data) lines(data$Fwd_EY, predict_ret_1l, col = "gold4", type = "b", cex = 0.7) lines(data$Fwd_EY, predict_ret_1q, col = "firebrick1" , type = "p", cex = 0.7) p1 <- recordPlot() dev.off()png("C:/Users/tkpme/Dropbox (Invictus FD)/Book PCRM/Ch 8 Estimating Expected Returns/Plots/SP1YrVsForwardPE.png") replayPlot(p1) dev.off() - Thomas Philips
抱歉,但我似乎无法在评论中创建代码。 - Thomas Philips
1
下次请直接编辑您的问题。 :) - Limey
2个回答

2
译文:关键是将图形放在一个列表中。
myPlots = list(p1, p10)
ggpubr::ggarrange(plotlist = myPlots, nrow = 1)

警告信息:
1:需要gridGraphics软件包来处理基础R绘图。将替换为空白图。
2:需要gridGraphics软件包来处理基础R绘图。将替换为空白图。
library(gridGraphics)
#Loading required package: grid

myPlots = list(p1, p10)
ggpubr::ggarrange(plotlist = myPlots, nrow = 1)

enter image description here

数据

plot(1:10, pch = 16, cex = 1.0, col = "blue")
p1 <- recordPlot()
dev.off()

plot(10:1, pch = 16, cex = 1.0, col = "red")
p10 <- recordPlot()
dev.off()

library(gridGraphics)是关键。为什么呢? - Agile Bean

0

尝试提前回应我上面第二条评论的OP...

以下是一种解决方案,它从原始数据开始,在散点图上叠加了最佳拟合线性回归。

d <- tibble(
       X=runif(40, 0, 100),
       Y=-5 + 0.3 * X + rnorm(40)
     )

d %>% ggplot(aes(x=X, y=Y)) + 
        geom_point() +
        stat_smooth(method = "lm")

enter image description here


谢谢 - 这个使用了ggplot,这迫使我重写一些代码。我试图变懒,但似乎重新制作创建图表的代码会让组合它们变得更容易一些。 - Thomas Philips

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接