HOWTO · R

Créer un tracé de surface 3D à partir des coordonnées(x,y,z)

Cet article montre comment tracer une surface 3D lorsque nous n'avons que les coordonnées x y z de certains points. Il décrit d'abord comment estimer les valeurs z des autres points de la grille x y par interpolation, puis illustre la procédure.

Base R et plusieurs packages fournissent des fonctions permettant de tracer une surface tridimensionnelle sur le plan horizontal. La plupart d’entre eux ont besoin d’une valeur z pour chaque combinaison de valeurs x et y en entrée.

En d’autres termes, ils ont besoin d’une grille x-y et de valeurs z pour chaque point de la grille.

Lorsque nous avons un data frame ou une matrice de valeurs (x,y,z) (coordonnées), nous pouvons tracer les points, mais pas la surface.

Nous devons estimer les valeurs z pour toutes les combinaisons de valeurs x et y en utilisant les données fournies et une fonction d’interpolation appropriée pour tracer la surface.

Cet article montrera comment utiliser le package akima pour estimer les valeurs z pour une grille de valeurs x-y. Nous allons ensuite tracer la surface à l’aide du package rgl.

la fonction interp() du package akima en R

Le package akima propose des fonctions d’interpolation de données bivariées.

La fonction interp() prend les trois vecteurs x, y et z et renvoie une grille 40 par 40 de valeurs x-y avec une valeur z correspondante.

Par défaut, une interpolation linéaire est produite.

la fonction persp3d() du package rgl en R

Le package rgl crée des graphiques interactifs 3D. Nous pouvons zoomer et faire pivoter le tracé à l’aide de la souris.

Nous utiliserons la fonction persp3d() pour tracer la surface et la fonction points3d() pour tracer les données d’origine.

Afin de visualiser les tracés dans R, nous devons définir une option particulière : options(rgl.printRglwidget = TRUE).

Démonstration des fonctions

Nous allons passer par les étapes suivantes.

  • Installez les packages requis s’ils ne sont pas déjà disponibles.
  • Chargez les packages requis.
  • Créez l’exemple de bloc de données.
  • Créer la liste des valeurs z correspondant à une grille de valeurs x-y à l’aide de interp().
  • Tracez la surface à l’aide de persp3d().
  • Ajouter les points à l’aide de points3d().

Exemple de code :

# INSTALL AND LOAD THE PACKAGES.
# Uncomment and run the concerned line to install the package.
#install.packages("akima")
library(akima)
#install.packages("rgl")
library(rgl)

# CREATE THE SAMPLE DATA.
set.seed(1)
x=rnorm(50)
set.seed(2)
y=rnorm(50)
z=c(rep(5,5),rep(-10,5), rep(3,15), rep(20,5), seq(5,15, length.out=10), rep(0,5), rep(3,5))
XYZ=data.frame(x,y,z)

# INTERPOLATE THE Z VALUES.
a_mat=interp(XYZ$x, XYZ$y, XYZ$z)

# PLOT THE SURFACE AND THE POINTS.
options(rgl.printRglwidget = TRUE)
persp3d(a_mat$x, a_mat$y, a_mat$z, col="yellow")
points3d(x,y,z, col="red")

Tracé de sortie :

rgl produit un tracé 3D interactif.

Tracé en perspective 3D