1

我正在尝试使用 ggpubr 中的 ggarrange 从 spatstat 创建 Ripley 的 K 函数的多个图,即我使用 Kest() 计算 5 个景观的 Ripley 的 K,然后将它们全部绘制在一起。如:

kk1plot<-plot(Kest(landscape))

但是,当我尝试使用时,我返回错误“无法将类 data.frame 的对象转换为 grob”:

k1<-ggarrange(kk1plot,kk2plot,kk3plot,kk4plot,kk5plot,nrow=3,ncol=2) 

同样,当我使用拼凑和代码时,我返回错误“仅知道如何添加 ggplots 和/或 grobs”:

k1<-wrap_plots(list(kk1plot,kk2plot,kk3plot,kk4plot,kk5plot),nrow=3,ncol=2)

有谁知道我如何将多个 Ripley's K 函数的输出绘制为单个图?即将spatstat 的Kest() 的输出转换为可以使用上述代码行之一操作的图?

4

2 回答 2

3

spatstat 包使用基本图形。绘制多个估计 K 函数的内置方法如下所示。返回的输出Kest是 a data.frame,其中不同的估计值作为列,因此您可以自己使用相关的美学使用 ggplot 绘制它。

library(spatstat)
X1 <- rpoispp(100)
X2 <- rpoispp(100)
X3 <- rpoispp(100)
X4 <- rpoispp(100)
X5 <- rpoispp(100)
Xlist <- solist(X1, X2, X3, X4, X5)
plot(Xlist, main = "", main.panel = "")

Klist <- lapply(Xlist, Kest)
Klist <- as.anylist(Klist)
plot(Klist, main = "", main.panel = "")

于 2020-12-28T22:42:01.093 回答
2

一种方法是使用ggplotify::as.grob将绘图捕获为 grob 对象。

然后,您可以使用ggpubr::ggarange.

正确的语法是用plot 函数as.grob(~ ...)替换。...

library(ggplotify)
library(ggpubr)
library(spatstat)
for(i in 1:5){
  varname <- paste0("kk",i,"plot")
  assign(varname,
         as.grob(~plot(Kest(rMatClust(kappa=5,r=0.1,mu=100)),
                       main = paste("Plot",i),
                       cex.axis = 0.5, cex.main = 0.6,
                       legendargs = list(cex = 0.2)))
  )
}
ggarrange(kk1plot,kk2plot,kk3plot,kk4plot,kk5plot,nrow=3,ncol=2) 

在此处输入图像描述

于 2020-12-28T22:14:54.687 回答