2013-03-30 11 views
6

Ich habe die Daten, die parametrische 3D-Kurve sind:Wie zeichne parametrische 3D-Kurve mit Glättung in R?

t  x  y  z 
0.000 3.734 2.518 -0.134  
0.507 2.604 9.059 0.919 
0.861 1.532 11.584 -0.248 
1.314 1.015 1.886 -0.325 
1.684 2.815 4.596 3.275 
1.938 1.359 8.015 2.873 
2.391 1.359 8.015 2.873 
.............................. 

Ich fand scatterplot3d und plot3d wirklich cool. Aber ich brauche eine glatte 3D-Kurve.

Wie kann ich es in R plotten?

+0

Haben Sie die Parameterfunktion von 't' haben, die die' xyz' Werte erzeugt? Aber selbst wenn nicht, möchten Sie in 3d zwischen den Punkten interpolieren, die Sie bereits haben - und besser als eine einfache lineare Interpolation? – Spacedman

+1

'scatterplot3d' hat ein 'type'-Argument, das Sie auf' l' 'setzen können, um Ihre Punkte zu verknüpfen und eine Kurve zu bilden. –

+0

@ Spacedman Ja, ich möchte etwas besseres als einfache lineare Interpolation. – midas

Antwort

10

Sie können spline verwenden, um zwischen Ihren Punkten zu interpolieren und die Kurve zu glätten.

d <- read.delim(textConnection(
"t x y z 
0.000 3.734 2.518 -0.134 
0.507 2.604 9.059 0.919 
0.861 1.532 11.584 -0.248 
1.314 1.015 1.886 -0.325 
1.684 2.815 4.596 3.275 
1.938 1.359 8.015 2.873 
2.391 1.359 8.015 2.873" 
), sep=" ") 
ts <- seq(from = min(d$t), max(d$t), length=100) 
d2 <- apply(d[,-1], 2, function(u) spline(d$t, u, xout = ts)$y) 
library(scatterplot3d) 
p <- scatterplot3d(d2, type="l", lwd=3) 
p$points3d(d[,-1], type="h") 

Smoothed curve

Per @ Spacedman Kommentar, können Sie auch rgl nutzen könnten: diese können Sie interaktiv die Szene zu drehen.

library(rgl) 
plot3d(d2, type="l", lwd=5, col="navy") 
points3d(d[,-1]) 
spheres3d(d[,-1], radius=.1, col="orange") 
segments3d(matrix(t(cbind(d[,-1], d[,2:3], 0)), nc=3, byrow=TRUE)) 
planes3d(0,0,1,0, col="yellow", alpha=.5)  # Plane z=0 

enter image description here

+0

Bravo! Ich würde das mehr geben, wenn ich könnte. –

+1

Haben Sie das rgl-Paket für 3D-Plots ausprobiert? – Spacedman

+0

Ich schätze, so entstehen Achterbahnen! – PascalVKooten