在一个图中将ggplot2对象与晶格对象组合在一起

tho*_*hal 2 r ggplot2 lattice

我想结合ggplot2一个lattice情节对象.由于两个包都是基于grid我想知道这是否可能?理想情况下,我会做所有事情,ggplot2但我无法绘制三维散点图.

假设我有以下数据:

set.seed(1)
mdat <- data.frame(x = rnorm(100), y = rnorm(100), z = rnorm(100),
                   cluster = factor(sample(5, 100, TRUE)))
Run Code Online (Sandbox Code Playgroud)

首先,我想在以下位置创建一个散点图矩阵ggplot2:

library(ggplot2)
library(gtools)
library(plyr)

cols <- c("x", "y", "z")
allS <- adply(combinations(3, 2, cols), 1, function(r)
    data.frame(cluster = mdat$cluster,
          var.x = r[1],
          x = mdat[[r[1]]],
          var.y = r[2],
          y = mdat[[r[2]]]))

sc <- ggplot(allS, aes(x = x, y = y, color = cluster)) + geom_point() +
      facet_grid(var.x ~ var.y)
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在我想创建一个lattice包含所有变量的三维散点图:

library(lattice)
sc3d <- cloud(z ~ x + y, data = mdat, groups = cluster)
Run Code Online (Sandbox Code Playgroud)

现在,我想结合sc,并sc3d在一个单一的情节.我怎样才能做到这一点?也许用的帮助gridgridExtra(pushViewport,arrangeGrob?)?或者我可以制作三维散点图ggplot吗?理想情况下,我希望在空白面板中看到3d图,ggplot但我想这甚至要求得太多,所以对于初学者我会很高兴知道如何将这两个图并排排列.

ggplot 格子

bap*_*ste 6

library(gridExtra); library(lattice); library(ggplot2)
grid.arrange(xyplot(1~1), qplot(1,1))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可以通过gtable中的格子grob替换空面板,但由于轴等原因,它看起来不太好.

g <- ggplotGrob(sc)
lg <- gridExtra:::latticeGrob(sc3d)
ids <- which(g$layout$name == "panel")
remove <- ids[2]
g$grobs[[remove]] <- lg
grid.newpage()
grid.draw(g)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述