2012-11-21 9 views
9

Ich schreibe einen Regressionsalgorithmus, der versucht, Punkte innerhalb von Boxen zu "erfassen". Der Algorithmus versucht, die Kästchen so klein wie möglich zu halten, so dass die Kanten/Ecken der Kästchen normalerweise durch Punkte gehen, die die Größe der Kästchen bestimmen.Zeichnen von Linien zwischen zwei Punkten in 3D

Problem: Ich brauche grafische Ausgabe der Boxen in R. In 2D ist es einfach, Felder mit segments() zu zeichnen, die eine Linie zwischen zwei Punkten zeichnet. Also, mit 4 Segmenten kann ich ein Feld ziehen:

plot(x,y,type="p") 
segments(x1,y1,x2,y2) 

ich dann versucht, die beide scatterplot3d und plot3d Pakete für 3D-Plotten. In 3D funktioniert der Befehl segments() nicht, da keine zusätzliche z-Komponente vorhanden ist. Ich war überrascht, dass es anscheinend (zu mir) gibt es keinen adäquaten Ersatz in 3D für segments()

Gibt es eine einfache Möglichkeit, Boxen/Linien zwischen zwei Punkten beim Plotten in drei Dimensionen zeichnen?

+0

sind Sie sicher, dass Sie das 'plot3d' Paket verwendet? Es ist nicht auf CRAN: meinst du die 'plot3d' Funktion im' rgl' Paket? –

Antwort

12

Die scatterplot3d Funktion liefert Informationen, die Sie (x, y, z) Punkte in die entsprechende Ebene projizieren können, wie folgt:

library(scatterplot3d) 
x <- c(1,4,3,6,2,5) 
y <- c(2,2,4,3,5,9) 
z <- c(1,3,5,9,2,2) 
s <- scatterplot3d(x,y,z) 

## now draw a line between points 2 and 3 
p2 <- s$xyz.convert(x[2],y[2],z[2]) 
p3 <- s$xyz.convert(x[3],y[3],z[3]) 
segments(p2$x,p2$y,p3$x,p3$y,lwd=2,col=2) 

Die rgl Paket einen anderen Weg zu gehen, und vielleicht sogar leichter (beachten Sie, dass segments3d Punkte paarweise von einem Vektor nimmt)

plot3d(x,y,z) 
segments3d(x[2:3],y[2:3],z[2:3],col=2,lwd=2)