如何在R中垂直堆叠sjPlot的面板?

plupiseo  于 2023-04-27  发布在  其他
关注(0)|答案(2)|浏览(94)

我在R中使用sjPlot绘制了一个有意义的四向交互,下面是一个例子:

colnames(iris) <- c("y", "a", "b", "c", "d")

m0 <- lm(y ~ a * b * c * d, data = iris)

sjPlot::plot_model(m0, type = "pred", terms = c("a", "b", "c", "d"))

哪些地块:

我想把它们垂直堆叠d
sjpPlot是基于ggplot2的,但它并不简单地接受ggplot命令。有人知道如何做到这一点吗?

tgabmvqs

tgabmvqs1#

从图的图像(已经是一个多面板图),我猜你已经安装了see包,即如果没有,你会得到一个单图列表和警告:
在一个集成图中绘制多个面板需要see包。请在控制台中输入install.packages("see", dependencies = TRUE)进行安装。
会突然出现
如果安装了seesjPlot::plot_model将返回一个多面板图,它在后台使用patchwork,即返回的对象不再是ggplot的列表,而是patchwork对象。(因此,按照@jared_mamrot的回答(现已删除)中的建议应用patchwork::wrap_plots不会有任何效果。)
相反,在这种情况下,您可以通过patchwork::plot_layout设置列数。
注意:我的猜测是,在多面板图的情况下,有或者应该有一个参数来控制返回哪种类型的对象或者列数。不幸的是,我在文档中找不到这方面的东西。(:

library(patchwork)
require(see)

p <- sjPlot::plot_model(m0, type = "pred", terms = c("a", "b", "c", "d")) 

p +
  plot_layout(ncol = 1)

lskq00tm

lskq00tm2#

我认为@stefan的答案是解决这个问题的最佳方案,但是,如果你没有安装“see”软件包(如果是这种情况,该函数会警告你),plot_model()会生成一个绘图列表,而不是单个图形。

library(sjPlot)
library(ggplot2)
library(patchwork)

colnames(iris) <- c("y", "a", "b", "c", "d")
  
m0 <- lm(y ~ a * b * c * d, data = iris)
  
list_of_plots <- plot_model(m0, type = "pred", terms = c("a", "b", "c", "d"))
#> Warning: Package `see` needed to plot multiple panels in one integrated figure.
#>   Please install it by typing `install.packages("see", dependencies =
#>   TRUE)` into the console.

# You can edit the plots to suit, e.g. remove titles from plots 2 and 3
list_of_plots[[2]] <- list_of_plots[[2]] + labs(title = "")
list_of_plots[[3]] <- list_of_plots[[3]] + labs(title = "")

wrap_plots(list_of_plots, ncol = 1, guides = "collect")

创建于2023-04-20使用reprex v2.0.2

相关问题