Erstellen ein 3D-Perspektivdiagramm in R

Jesse John 30 Januar 2023
  1. Argumente der Funktion persp() in R
  2. Darstellung einer ebenen Fläche in R
  3. Diagramm aus einer Matrix in R
Erstellen ein 3D-Perspektivdiagramm 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.

  1. x und y sind numerische Vektoren. Diese müssen in aufsteigender Reihenfolge sein.

  2. Das Argument z nimmt eine Matrix. Es muss einen Wert von z in dieser Matrix geben, der jeder Kombination von x und y 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.

  1. Das Argument phi gibt die Kolatitude an. Die Änderung von phi von 0 auf 90 Grad wirkt sich auf die Ansicht von vorne nach oben aus.
  2. Das theta-Argument gibt den Azimut an. Eine Änderung von theta 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:

Diagramme der horizontalen Ebene

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:

Diagramme der schiefen Ebene

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:

Plot aus einer Matrix

Autor: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

Verwandter Artikel - R Plot