Créer un tracé de perspective 3D dans R

Jesse John 30 janvier 2023
  1. Arguments de la fonction persp() en R
  2. Tracé d’une surface plane en R
  3. Tracer à partir d’une matrice dans R
Créer un tracé de perspective 3D dans R

Nous pouvons créer un tracé en perspective d’une surface en utilisant la fonction persp() de la base R. La surface passe par les valeurs z correspondant à toutes les paires de valeurs (x,y).

Pour utiliser la fonction persp(), nous devons comprendre le format de ses principaux arguments. Le reste de cet article les démontre et les explique avec des exemples simples.

Arguments de la fonction persp() en R

Il y a trois arguments x, y et z pour les 3 coordonnées puisque persp() trace en 3 dimensions.

  1. x et y sont des vecteurs numériques. Ceux-ci doivent être dans l’ordre croissant.

  2. L’argument z prend une matrice. Il doit y avoir une valeur de z dans cette matrice correspondant à chaque combinaison de x et y.

    La surface tracée passe par toutes les valeurs de z.

Une façon de créer la matrice pour z consiste à utiliser la fonction outer() pour appliquer une fonction bivariée à toutes les combinaisons de valeurs x et y.

Par défaut, la fonction persp() montre la vue du côté négatif de l’axe y.

  1. L’argument phi donne la colatitude. Changer phi de 0 à 90 degrés affecte le changement de la vue de l’avant vers le haut.
  2. L’argument theta donne l’azimut. Changer theta de 0 à 90 degrés a pour effet de faire tourner la figure dans le sens des aiguilles d’une montre autour de son axe vertical.

Tracé d’une surface plane en R

Nous allons maintenant créer deux plans et les visualiser sous différents angles. Le premier est un plan horizontal.

Exemple de code :

# 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))

Chiffres de sortie :

Tracés du plan horizontal

Les quatre figures illustrent l’effet du changement des angles theta et phi.

Ensuite, nous allons regarder un plan oblique. La syntaxe illustre également la définition d’autres arguments de la fonction persp().

Exemple de code :

# 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)

Chiffres de sortie :

Parcelles de plan oblique

Tracer à partir d’une matrice dans R

La fonction persp() peut tracer à partir d’une matrice des valeurs z correspondant aux vecteurs x et y dans un ordre croissant.

Le nombre de lignes et de colonnes de z doit correspondre aux longueurs de x et y, respectivement.

Exemple de code :

# 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)

Chiffre de sortie :

Tracer à partir d’une matrice

Auteur: 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.

Article connexe - R Plot