Créer un tracé de perspective 3D dans R
-
Arguments de la fonction
persp()
en R - Tracé d’une surface plane en R
- Tracer à partir d’une matrice 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.
-
x
ety
sont des vecteurs numériques. Ceux-ci doivent être dans l’ordre croissant. -
L’argument
z
prend une matrice. Il doit y avoir une valeur dez
dans cette matrice correspondant à chaque combinaison dex
ety
.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
.
- L’argument
phi
donne la colatitude. Changerphi
de 0 à 90 degrés affecte le changement de la vue de l’avant vers le haut. - L’argument
theta
donne l’azimut. Changertheta
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 :
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 :
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 :