Il est possible de tracer des graphiques en 3D grâce à la librairie rgl ou encore plot3d.
Une librairie géniale pour réaliser des graphiques 3D très performants et interactifs est plotly.
Voici quelques graphiques que l'on peut réaliser avec rgl. Ces graphiques sont interactifs : on peut zoomer et tourner le graphique à l'aide de la souris dans tous les sens sous R.
install.packages("rgl") # installer la librairie library(rgl) # lancer la librairieCette commande plot3d() permet de tracer un graphique en 3d. Voici comment la paramétrer. cf. exemples ci-après.
plot3d obtenu avec la librairie rgl sous R CRAN (gif animé)
Exemple 01 - Graphique
library(rgl)# Attention, il faut charger la librairie rgl # Exemple 1 simple x = c(1,2,4,5) ; y =c(2,6,7,8) ; z = c(4,2,4,1) plot3d(x,y,z,type="s",radius=0.8,col="red") Exemple 02- Graphique avec titres aux axes
x = rnorm(100) ; y = rnorm(100) ; z = rnorm(100) plot3d(x,y,z,type="p",col="purple",xlab="parameter x",ylab=" parameter y",zlab="parameter z" ) # Pour sauvegarder une capturergl.snapshot("rgl_2_R.gif")Exemple 03 - Nuage de points libre, sans axes, couleur d'arrière plan orange
library(rgl)# Autre méthode avec la commande rgl.points rgl.open()# Ouverture d'une fenêtre rgl.bg(color = "orange") # Définir la couleur d'arrière plan rgl.points(x, y, z, color = "blue", size = 5) # TracerExemple 04 - Nuage de points libre, sans axes, couleur d'arrière plan orange
rgl.bg(color = "white") # Etape 1 - tracer le graphique x = c(1,2,4,5) ; y =c(2,6,7,8) ; z = c(4,2,4,1) plot3d(x,y,z,type="s",radius=0.2,col="red") # Etape 2 - ajouter une sphère bleue en coordonnées 3,3,3 spheres3d(3,3,3,col="blue",radius = 0.3) # Etape 3 - ajouter des points verts px = rnorm(10) ; py = rnorm(10) ; pz = rnorm(10) points3d(px,py,pz,col="green") rgl.snapshot("rgl_3_R.gif")Il faut faire appel à la commande ellipse3d()
Exemple 05 - Avec ellipsoïde
# Etape 1 - les points x = c(1,2,4,5) ; y =c(2,6,7,8) ; z = c(4,2,4,1) plot3d(x,y,z,type="s",radius=0.2,col="red") # Etape 2 - configuer l'ellipse ellipse <- ellipse3d(cov(cbind(x,y,z)), centre=c(mean(x), mean(y), mean(z)), level = 0.5) # Tracer le tout plot3d(ellipse, col = "blue", alpha = 0.4, add = TRUE, type="shade") La commande rgl.snapshot() permet de faire une capture gif d'un graphique 3D rgl.
On peut en générer une série de gif qui pourra être animé avec un petit logiciel tel photoscape.
# Etape 1 - définir l'adresse de sauvegarde avec la commande setwd setwd("C:\MesDoc")# Etape 2 - tracer le graphique x = c(1,2,4,5) ; y =c(2,6,7,8) ; z = c(4,2,4,1) plot3d(x,y,z,type="s",radius=0.2,col="red") # Etape 3 - Sauvegarder n gifs en faisant varier l'angle progressivement... for (i in 1:45) { rgl.viewpoint(i, 20) filename <- paste("pic", formatC(i, digits = 1, flag = "0"), ".png", sep = "") rgl.snapshot(filename) } X1 <- rnorm(45,5,1.5) ; X2 <- rnorm(45,5,1.5) ; X3 <- (X1-5)^2 + 2*(X2-5)^2 x <- cbind(X1,X2,X3) # matrix(x,ncol=3,byrow=T) #+3arrowslwd <- 2; pointscex <- 1.5;library(plot3D)scatter3D(x[,1], x[,2], x[,3], pch = 19, cex = pointscex, #bty='b2', xlab='',ylab='',zlab='', main = "", col='red')La librairie plotly de R offre une solution très performante pour réaliser de nombreux graphiques 3D de son choix.
Ces graphiques sont tous interactifs et au format html.
plotly est aussi très performant pour rendre interactif des graphiques ggplot. cf. la page - interfaces graphiques.
Etape 1 - Les données - données simulées ici
x1 <- rnorm(20,5,1.5)x2 <- rnorm(20,5,1.5)y <- (x1-5)^2 + 2*(x2-5)^2 #+ rnorm(k)# Etendue de x1, x2 et x1lim <- range(x1);x2lim <- range(x2);ylim <- range(y)Etape 2 - La régression linéraire 3D
# Régression linéaire sur les résultats en fonction des différentes x1 et x2lm(formula = y ~ I(x1^2) + I(x2^2) +I(x1*x2) + x1 + x2 ) -> lmpoly cat( "Equation de la nappe : \n" )print(lmpoly)Etape 3 - Fabrication de la grille de la nappe
dim = 45x1.grid <- seq(x1lim[1],x1lim[2],length.out=dim)x2.grid <- seq(x2lim[1],x2lim[2],length.out=dim)x1_x2.grid <-expand.grid(x1=x1.grid,x2=x2.grid)# Calcul des ordonnées des points de la nappey.nappe<-with(x1_x2.grid, lmpoly$coefficients[2]*x1^2+ lmpoly$coefficients[3]*x2^2+ lmpoly$coefficients[4]*x1*x2+ lmpoly$coefficients[5]*x1+ lmpoly$coefficients[6]*x2+ lmpoly$coefficients[1])y.mat<- matrix(y.nappe,nrow=dim, ncol=dim,byrow=T)Etape 4 - Préparer le gradient de couleur
# Programmer les couleurscol<-c("blue","cyan","yellow","green","brown")colfunc<-colorRampPalette(col);colors <- (colfunc(20))# Attribuer une couleur par point de ycolorscale <- cbind(seq(0 , 1, by=1/(length(y) - 1)),colors)Etape 5 - Configurer le futur graphique
# Mise en formemain = "titre"font <- list(family = "Courier New, monospace",size = 12,color = "#7f7f7f")xlabel <- list(title = paste("x1"," (x)"),titlefont = font)ylabel <- list(title = paste("x2"," (y)"),titlefont = font)zlabel <- list(title = paste("y"," (z)"),titlefont = font)scene = list(xaxis = xlabel ,yaxis = ylabel ,zaxis = zlabel) Etape 6 - Tracer les points et la nappe de régression
require("plotly")plot_ly(x = x1.grid, y = x2.grid, z = y.mat, colorscale = colorscale) %>% layout(title = main, scene = scene) %>% add_surface() %>% add_trace(x = x1, y = x2, z = y, mode = 'markers')