2012-11-25 12 views
5

I eine Gleichung einer Geraden habenHinzufügen einer Ebene zu einer scatterplot3d

y = sqrt (c + x^2)

und ich möchte ein Flugzeug zu einem 3D-Punktwolke an, so dass mein Flugzeug ist senkrecht zur xy-Ebene und die oben angegebene Linie ist die Schnittlinie der beiden Ebenen.

Wie mache ich das? Ich verstehe nicht ganz, wie plane3d funktioniert. Ich habe gelesen http://svitsrv25.epfl.ch/R-doc/library/scatterplot3d/html/scatterplot3d.html

Aber immer noch nicht verstanden.

+0

Verwandte, aber kein Duplikat: http://stackoverflow.com/q/6774777/636656 –

Antwort

4

Dies könnte sein, was Sie suchen:

library(scatterplot3d) 
# y=sqrt(a+x^2) with x in (-0.5,0.5), z in (0,1) and a=0 
a <- 0 
x <- rep(seq(-0.5, 0.5, length = 200), each = 200) 
y <- sqrt(a + x^2) 
z <- rep(seq(0, 1, length = 200), 200) 
scatterplot3d(x, y, z, highlight.3d = TRUE, pch = 20) 

enter image description here

Edit:, die hilfreich sein würde, um zu sehen, wie Sie diese Punkte hinzugefügt haben, aber lassen Sie uns das zweite Beispiel nehmen von ?scatterplot3d

temp <- seq(-pi, 0, length = 50) 
    x2 <- c(rep(1, 50) %*% t(cos(temp))) 
    y2 <- c(cos(temp) %*% t(sin(temp))) 
    z2 <- c(sin(temp) %*% t(sin(temp))) 

Kombination Jetzt x wit h x2 und tut das gleiche mit anderen erhalten wir:

scatterplot3d(c(x,x2), c(y,y2), c(z,z2), highlight.3d = TRUE, pch = 20) 

enter image description here

+0

wie würde ich das Ding zu einem bereits vorhandenen Streudiagramm hinzufügen, mit Punkten darauf? – user1760348

+0

@ user1760348, beantwortet das jetzt die Frage? – Julius

1

Neben der vorherigen Antwort, sobald Sie ein 3-D-Scatterplot konstruieren Sie ein Flugzeug, um es durch die Schaffung eines Modells hinzufügen und analysieren Sie es mit einer Funktion verschachtelt in Ihrem scatterplot3d() Container. Es sollte wie folgt aussehen:

plot3d <- scatterplot3d(x, y, z, ...) 
model <- lm(y ~ sqrt(c + x^2) + z) 
plot3d$plane3d(model) 

Es ist eine sehr seltsame Syntax, um eine Funktion in einem Container wie das haben, aber es funktioniert, können Sie so etwas wie dieses geben (die punktierten Ebene sichtbar in der Nähe des Zentrums von der Würfel):

3-D scatterplot with plane through the center

Wenn Sie eine oder mehrere Ebenen möchten manuell erstellen, würde ich Uwes Methode verwenden, die ich here erneut geschrieben:

spd <- scatterplot3d(1:10, 1:10, 1:10) 

# xy 
spd$plane3d(0.3549896,0,0,lty="dotted") 

# yz 
x0 <- 5 
xyz1 <- spd$xyz.convert(rep(x0, 6), rep(0, 6), seq(0, 10, by=2)) 
xyz2 <- spd$xyz.convert(rep(x0, 6), rep(10, 6), seq(0, 10, by=2)) 
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted") 

xyz1 <- spd$xyz.convert(rep(x0, 6), seq(0, 10, by=2), rep(0, 6)) 
xyz2 <- spd$xyz.convert(rep(x0, 6), seq(0, 10, by=2), rep(10, 6)) 
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted") 

# zx 
y0 <- 6 
xyz1 <- spd$xyz.convert(rep(0, 6), rep(y0, 6), seq(0, 10, by=2)) 
xyz2 <- spd$xyz.convert(rep(10, 6), rep(y0, 6), seq(0, 10, by=2)) 
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted") 

xyz1 <- spd$xyz.convert(seq(0, 10, by=2), rep(y0, 6), rep(0, 6)) 
xyz2 <- spd$xyz.convert(seq(0, 10, by=2), rep(y0, 6), rep(10, 6)) 
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted") 

Dies erzeugt Ebene durch manuelle Vorgabe:

enter image description here

Verwandte Themen