Erstellen ein 3D-Perspektivdiagramm in R
-
Argumente der Funktion
persp()
in R - Darstellung einer ebenen Fläche in R
- Diagramm aus einer Matrix in R
Wir können ein perspektivisches Diagramm einer Oberfläche erstellen, indem wir die Funktion persp()
von Basis R verwenden. Die Oberfläche durchläuft die z
-Werte, die allen Paaren von (x,y)
-Werten entsprechen.
Um die Funktion persp()
zu verwenden, müssen wir das Format ihrer Hauptargumente verstehen. Der Rest dieses Artikels demonstriert und erklärt diese anhand einfacher Beispiele.
Argumente der Funktion persp()
in R
Es gibt drei Argumente x
, y
und z
für die 3 Koordinaten, da persp()
in 3 Dimensionen plottet.
-
x
undy
sind numerische Vektoren. Diese müssen in aufsteigender Reihenfolge sein. -
Das Argument
z
nimmt eine Matrix. Es muss einen Wert vonz
in dieser Matrix geben, der jeder Kombination vonx
undy
entspricht.Die dargestellte Fläche durchläuft alle
z
-Werte.
Eine Möglichkeit, die Matrix für z
zu erstellen, besteht darin, die Funktion outer()
zu verwenden, um eine bivariate Funktion auf alle Kombinationen von x
- und y
-Werten anzuwenden.
Standardmäßig zeigt die Funktion persp()
die Ansicht von der negativen Seite der y
-Achse.
- Das Argument
phi
gibt die Kolatitude an. Die Änderung vonphi
von 0 auf 90 Grad wirkt sich auf die Ansicht von vorne nach oben aus. - Das
theta
-Argument gibt den Azimut an. Eine Änderung vontheta
von 0 auf 90 Grad bewirkt eine Drehung der Figur im Uhrzeigersinn um ihre vertikale Achse.
Darstellung einer ebenen Fläche in R
Wir werden jetzt zwei Ebenen erstellen und sie aus verschiedenen Blickwinkeln betrachten. Die erste ist eine horizontale Ebene.
Beispielcode:
# A function that gives a constant z value.
H = function(x, y){
return (0*x+0*y+1)
}
X = seq(-1,1,length.out=5)
Y = seq(-1,1, length.out=5)
# Apply the H function to all pairs (x,y).
# This gives the z matrix.
Z = outer(X, Y, H)
# Four different views.
persp(x=X,y=Y,z=Z, theta=0, phi=0, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))
persp(x=X,y=Y,z=Z, theta=0, phi=45, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))
persp(x=X,y=Y,z=Z, theta=0, phi=90, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))
persp(x=X,y=Y,z=Z, theta=45, phi=45, xlim=range(-2,2), ylim=range(-2,2), zlim=range(-2,2))
Ausgangszahlen:
Die vier Abbildungen veranschaulichen den Effekt der Änderung der Winkel theta
und phi
.
Als nächstes betrachten wir eine schiefe Ebene. Die Syntax veranschaulicht auch das Setzen anderer persp()
-Funktionsargumente.
Beispielcode:
# A function for a plane.
O = function(x, y){
return (2*x+3*y-2)
}
X1 = seq(-2,2,length.out=15)
Y1 = seq(-2,2, length.out=15)
# Apply the function to all combinations of x and y.
Z1 = outer(X1, Y1, O)
# Check the range of the values of Z.
# This will help create the limits for the box.
range(Z1)
# Because we do not use the scale=FALSE argument, the output is a cube.
# The axes are scaled.
persp(x=X1,y=Y1,z=Z1, theta=20, phi=10, xlim=range(-5,5), ylim=range(-5,5), zlim=range(-12,8),
xlab="x-axis",
ylab="y-axis",
zlab="z-axis",
main="Oblique Plane",
col="#00FFFF",
ticktype="detailed",
nticks=3)
# With scale=FALSE.
persp(x=X1,y=Y1,z=Z1, theta=-15, phi=5, xlim=range(-5,5), ylim=range(-5,5), zlim=range(-12,8),
scale = FALSE,
xlab="x-axis",
ylab="y-axis",
zlab="z-axis",
main="Oblique Plane",
col="#FF00FF",
ticktype="detailed",
nticks=3)
Ausgangszahlen:
Diagramm aus einer Matrix in R
Die Funktion persp()
kann aus einer Matrix von z
-Werten zeichnen, die den Vektoren x
und y
in aufsteigender Reihenfolge entsprechen.
Die Anzahl der Zeilen und Spalten von z
muss mit der Länge von x
bzw. y
übereinstimmen.
Beispielcode:
# Manually create a matrix of z values corresponding
# to all combinations of some x and y.
# (Or use such a pre-existing matrix.)
Z2 = matrix(data=c(1,1,1,1,1,
1,-1,-1,-1,1,
1,-1,3,-1,1,
1,-1,-1,-1,1,
1,1,1,1,1), ncol=5)
X2 = seq(-4, 4, length.out=5)
Y2 = seq(-2, 2, by=1)
persp(x=X2, y=Y2, z=Z2, scale=FALSE, col="#CBD68A", theta=30, phi=15)
Ausgangszahl: