使用带有 grid.arrange 的 ggmultiplot 对象
use a ggmultiplot object with grid.arrange
我正在尝试使用 grid.arrange()
将线性回归图及其诊断图放入一个图中。为了创建诊断图,我打算使用 autoplot()
library(gridExtra)
library(ggplot2)
linearMod <- lm(dist ~ speed, data=cars)
qqp <- (autoplot(linearMod, which = 2)) # qqplot
rvf <- (autoplot(linearMod, which = 1)) # res vs fitted plot
grid.arrange(qqp, rvf, nrow = 2)
> Error in `$<-`(`*tmp*`, wrapvp, value = vp) :
no method for assigning subsets of this S4 class
显然,autoplot 创建了一个类型为 S4
的 ggmultiplot,但我找不到将其转换为 grob 的方法,这是使用 grid.arrange()
.
所必需的
我试过了:
library(ggplotify)
as.grob(qqp)
> Error in UseMethod("as.grob") :
no applicable method for 'as.grob' applied to an object of class "ggmultiplot"
as.grob(qqp@plots) # also failed...
有人知道解决办法吗?是否可以替代 autoplot 的诊断图或将其与其他图组合的任何其他方法?
感谢任何帮助!
从 autoplot
class 对象调用 ggplot2
autoplot
正在创建一个 class 对象 ggmultiplot
,其中包含您的 ggplot 格式的绘图。
> summary(qqp)
Length Class Mode
1 ggmultiplot S4
但是,您必须调用此 ggplot
才能在 grid.arrange
中使用。使用您的示例,您可以执行类似的操作:
library(ggfortify)
library(gridExtra)
grid.arrange(qqp@plots[[1]], rvf@plots[[1]], nrow = 2)
使用ggplot2
重新创建由autoplot
绘制的图
或者,您可以使用 dplyr
(或其他方法)提取拟合值和残差值并直接获得 ggplot:
library(tidyverse)
library(gridExtra)
CARS <- cars[,c("speed","dist")] %>% mutate(Fitted = linearMod$fitted.values, Residual = linearMod$residuals)
a <- ggplot(CARS, aes(x = Fitted, y = Residual))+
geom_point()+
stat_smooth(se = FALSE)
b <- ggplot(CARS, aes(sample = dist)) + stat_qq() + geom_qq_line(linetype = "dashed")
grid.arrange(b,a, nrow = 2, ncol = 1)
希望能帮到您解决问题
我正在尝试使用 grid.arrange()
将线性回归图及其诊断图放入一个图中。为了创建诊断图,我打算使用 autoplot()
library(gridExtra)
library(ggplot2)
linearMod <- lm(dist ~ speed, data=cars)
qqp <- (autoplot(linearMod, which = 2)) # qqplot
rvf <- (autoplot(linearMod, which = 1)) # res vs fitted plot
grid.arrange(qqp, rvf, nrow = 2)
> Error in `$<-`(`*tmp*`, wrapvp, value = vp) :
no method for assigning subsets of this S4 class
显然,autoplot 创建了一个类型为 S4
的 ggmultiplot,但我找不到将其转换为 grob 的方法,这是使用 grid.arrange()
.
我试过了:
library(ggplotify)
as.grob(qqp)
> Error in UseMethod("as.grob") :
no applicable method for 'as.grob' applied to an object of class "ggmultiplot"
as.grob(qqp@plots) # also failed...
有人知道解决办法吗?是否可以替代 autoplot 的诊断图或将其与其他图组合的任何其他方法?
感谢任何帮助!
从 autoplot
class 对象调用 ggplot2
autoplot
正在创建一个 class 对象 ggmultiplot
,其中包含您的 ggplot 格式的绘图。
> summary(qqp)
Length Class Mode
1 ggmultiplot S4
但是,您必须调用此 ggplot
才能在 grid.arrange
中使用。使用您的示例,您可以执行类似的操作:
library(ggfortify)
library(gridExtra)
grid.arrange(qqp@plots[[1]], rvf@plots[[1]], nrow = 2)
使用ggplot2
重新创建由autoplot
或者,您可以使用 dplyr
(或其他方法)提取拟合值和残差值并直接获得 ggplot:
library(tidyverse)
library(gridExtra)
CARS <- cars[,c("speed","dist")] %>% mutate(Fitted = linearMod$fitted.values, Residual = linearMod$residuals)
a <- ggplot(CARS, aes(x = Fitted, y = Residual))+
geom_point()+
stat_smooth(se = FALSE)
b <- ggplot(CARS, aes(sample = dist)) + stat_qq() + geom_qq_line(linetype = "dashed")
grid.arrange(b,a, nrow = 2, ncol = 1)
希望能帮到您解决问题