2016-05-11 16 views
1

Ich habe den folgenden Datensatz und muss eine Oberfläche basierend auf diesem Datensatz (von 60 3D-Punkten) zeichnen. Hier sind X, Y die horizontalen Koordinaten der Ebene und Z ist die vertikale/Höhen-Koordinate.3D-Oberflächendiagramm in R, gegeben x, y, z-Koordinaten

p = read.csv("points.csv") 
    PTS  X  Y  Z 
1 101 481897.9 5456408 94.18695 
2 102 481888.8 5456417 94.30702 
3 103 481877.0 5456410 94.29034 
4 104 481879.9 5456425 94.25546 
5 105 481872.7 5456424 94.09370 

Nach mehreren Stellen und versuchen, suche durch Bibliotheken in verschiedenen Funktionen zu nutzen, kann ich einen Weg finden, um noch nicht richtig um die Oberfläche zu zeichnen. Ich habe folgendes versucht:

library(plotly) 
plot_ly(y= Y, x = X, z = Z, data=p, type = "surface") #returns empty graphic frame 

PX = data.matrix(p$X) 
PY = data.matrix(p$Y) 
PZ = data.matrix(p$Z) 

library(plot3D) 
surf3D(PX, PY, PZ) 
#returns: Error in if (is.na(var)) ispresent <- FALSE else if (length(var) == 1) if (is.logical(var)) if (!var) ispresent <- FALSE : 
    argument is of length zero 
library(lattice) 
wireframe(p$Z ~ p$X*p$Y, data = p) #returns just a cube 
library(rgl) 
surface3d(p$X,p$Y,p$Z) 
#returns: Error in rgl.surface(x = c(481897.916, 481888.8482, 481876.9524, 481879.9393, : y' length != 'x' rows * 'z' cols; 
#although there are 60 data points in the form (X,Y,Z) in the data set, with no points missing any coordinate 

Ich muss etwas schrecklich falsch hier getan haben. Würde es jemanden etwas ausmachen, darauf hinzuweisen, was der Fehler ist?

+1

versuchen, eine 3D-Punktwolke mit rgl :: plot3d (p $ X, p $ Y, p $ Z) aufgetragen ist. Wenn Sie Ihre Daten mit dem Befehl dput posten können, erleichtern Sie anderen die Arbeit. – Dave2e

Antwort

0

Sie können kein 3D-Oberflächendiagramm mit diesen Daten machen, weil es tun Sie Z-Wert haben, für jeden (X, Y) Paar, wie diese:

X1 X2 X3 ... Xn 
Y1 Z11 Z12 Z13 ... Z1n 
Y2 Z21 Z22 Z23 ... Z2n 
Y3 Z31 Z32 Z33 ... Z3n 
.     . 
.     . 
.     . 
Ym Zm1 Zm2 Zm3 ... Zmn 

Zum Beispiel haben Sie nicht Z-Wert für (481897.9,5456417) Paar.

Also, alles, was Sie tun können, ist ein scatter3d Grundstück:

plot_ly(data = p,x = X,y = Y, z = Z,type = "scatter3d",showlegend = FALSE) 

enter image description here

Verwandte Themen