2016-12-22 7 views
0

Ich versuche, drei 3D-Plots zu zeichnen und alle drei gleichzeitig anzuzeigen. Für die anderen Plots habe ich die Funktion grid.arrange aus dem Paket gridExtra verwendet. Ich bekomme jedoch einen Fehler mit meinen 3D-Plots. Der Fehler, den ich erhalte lautet: "Fehler in gList (Liste (xyz.convert = Funktion (x, y = NULL, z = NULL): nur 'grobs' erlaubt in" gList ""3D-Plots und grid.arrange in R

Mein Code sieht etwas wie dies:

cont1<-data.frame(matrix(rnorm(300), nrow=10, ncol=3)) 
pre1<-data.frame(matrix(rnorm(300), nrow=10, ncol=3)) 
post1<-data.frame(matrix(rnorm(300), nrow=10, ncol=3)) 

library(scatterplot3d) 
attach(as.data.frame(cont1)) 
p<-scatterplot3d(X1,X2,X3, main="3D Scatterplot") 
fit <- lm(X3 ~ X1+X2) 
p$plane3d(fit) 


attach(as.data.frame(pre1)) 
l<-scatterplot3d(X1,X2,X3, main="3D Scatterplot") 
fit <- lm(X3 ~ X1+X2) 
l$plane3d(fit) 


attach(as.data.frame(post1)) 
m<-scatterplot3d(X1,X2,X3, main="3D Scatterplot") 
fit <- lm(X3 ~ X1+X2) 
m$plane3d(fit) 

require(gridExtra) 
grid.arrange(p,l,m) 

Wie ich dieses Problem beheben kann

+1

Zunächst ist Ihr Beispiel nicht reproduzierbar. 'x',' y' und 'z' sind nicht definiert. Zweitens ist das Anhängen in diesem Szenario nicht notwendig. Drittens, warum nicht "par (mfrow)" verwenden, z. B. "par (mfrow = c (2,2))" oder "par (mfrow = c (1,3))" usw.? Ich denke, grid.arrange ist für das Arrangieren von ggplot-Objekten und nicht für Grundflächen gedacht. – emilliman5

+0

Ich habe es bearbeitet, um es reproduzierbar zu machen. Danke für Ihre Hilfe! –

Antwort

1

ich bin nicht sicher, dass grid.arrange mit irgendetwas von ggplot2 Plots verwendet werden ... Hier ist eine mögliche Lösung ist par Verwendung Wenn Sie eine 1x3 Anordnung wollen. Satz mfrow=c(1,3) oder ein 3x1, mfrow=c(3,1)

library(gridExtra) 
library(scatterplot3d) 

cont1<-data.frame(matrix(rnorm(300), nrow=10, ncol=3)) 
pre1<-data.frame(matrix(rnorm(300), nrow=10, ncol=3)) 
post1<-data.frame(matrix(rnorm(300), nrow=10, ncol=3)) 

par(mfrow=c(2,2)) 
p<-with(cont1, scatterplot3d(X1,X2,X3, main="3D Scatterplot")) 
fit <- lm(X3 ~ X1+X2) 
p$plane3d(fit) 

l<-with(pre1, scatterplot3d(X1,X2,X3, main="3D Scatterplot")) 
fit <- lm(X3 ~ X1+X2) 
l$plane3d(fit) 

m<-with(post1, scatterplot3d(X1,X2,X3, main="3D Scatterplot")) 
fit <- lm(X3 ~ X1+X2) 
m$plane3d(fit) 

enter image description here

+0

Dies ist genau das, was ich gesucht habe. Vielen Dank! –

+0

'grid.arrange()' kann mit Grid-basierten Grafiken verwendet werden, nicht nur mit ggplot2. 'scatterplot3d' verwendet Basisgrafiken. Es ist möglich, die beiden Systeme zu mischen, aber in diesem Fall ist es sinnvoll, bei reinen Basisgrafiken zu bleiben und Layout-Funktionen wie 'par (mfrow)' zu verwenden – baptiste

Verwandte Themen