Changer les labels d'un graphe 3D (rgl)

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Changer les labels d'un graphe 3D (rgl)

Messagepar Christophe Genolini » 23 Oct 2017, 15:20

Bonjour

Dans le cadre d'un cours sur les biais de confusion, je produits un nuage de points. Je le représente en 3D.

Code : Tout sélectionner

set.seeds(13)
dn <- expand.grid(id=1,Fortune=c("Riche","Pauvre"),Diamant=c("Oui","Non"))
dn <- dn[rep(1:4,times=c(50,5,10,100)),]
n <- nrow(dn)
dn$id <- 1:n
dn$Peste <- round(runif(n,0,ifelse(dn$Fortune=="Riche",10,30)),1)

library(rgl)
plot3d(dn$Fortune,dn$Diamant,dn$Peste,xlim=c(0.8,2.2),ylim=c(0.8,2.2),zlim=c(0,50))


A partir de la, j'aimerais changer des détails. Et je n'ai pas trouvé :-( :
1/ Sur l'axe des X et des Y, j'aimerais modifier les labels : au lieu d'avoir des nombres, je voudrais "Riche/Pauvre" et "Oui/Non"
2/ J'aimerais que les labels soient toujours en bas. A droite, a gauche ou devant, mais toujours en bas.

Savez-vous dans quelle direction chercher ?
Bonne fin de journée
Christophe
--
Christophe
https://rplusplus.com

Bastien Gamboa
Messages : 151
Enregistré le : 13 Jan 2011, 21:31

Re: Changer les labels d'un graphe 3D (rgl)

Messagepar Bastien Gamboa » 24 Oct 2017, 07:06

Bonjour Christophe,

Une proposition :

Code : Tout sélectionner

axis3d(edge="x", labels=c("Riche", "Pauvre"), nticks=2)
axis3d(edge="y", labels=c("Oui", "Non"), nticks=2)
Vu en rentrant dans rgl:::plot3d.default, puis decorate3d, axes3d et enfin axis3d.
Par contre je n'ai pas vu d'argument 'adj' si le placement ne te conviens pas...

HTH,
Bastien

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: Changer les labels d'un graphe 3D (rgl)

Messagepar François Bonnot » 24 Oct 2017, 07:38

Bonjour,
Voir aussi la fonction mtext3d() et son argument at.
François

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Re: Changer les labels d'un graphe 3D (rgl)

Messagepar Christophe Genolini » 24 Oct 2017, 17:47

Merci pour ces pistes, j'ai réussi :

Code : Tout sélectionner

set.seed(13)
dn <- expand.grid(id=1,Fortune=c("Riche","Pauvre"),Diamant=c("Oui","Non"))
dn <- dn[rep(1:4,times=c(50,5,10,100)),]
n <- nrow(dn)
dn$id <- 1:n
dn$Peste <- round(runif(n,0,ifelse(dn$Fortune=="Riche",10,30)),1)

library(rgl)
plot3d(dn$Fortune,dn$Diamant,dn$Peste,xlim=c(0.8,2.2),ylim=c(0.8,2.2),zlim=c(0,50),
  axes=FALSE,xlab="",ylab="",zlab="")
box3d()

axis3d(edge="x+", labels=c("Riche", "Pauvre"), nticks=2)
axis3d(edge="y", labels=c("Avec diam", "Sans diam"), nticks=2)
axis3d(edge="z++")


Nouveau soucis : je voudrais ajouter un plan (celui de la régression linéaire) sur mes points et je voudrais qu'il soit transparent. J'ai mis alpha=0.3. Ca donne une illusion de transparence... mais ca n'est qu'une illusion, les points derrières le plan sont cachés :

Code : Tout sélectionner

(model <- summary(lm(Peste~Fortune+Diamant,data=dn)))
coef<-model[[4]][,1]
b <- coef[1]
aF <- coef[2]
aD <- coef[3]

triangles3d(x=c(0.8,0.8,2.2),y=c(0.8,2.2,2.2),z=b+c(-0.2*aF-0.2*aD,-0.2*aF+1.2*aD,1.2*aF+1.2*aD),col=adjustcolor("red",0),alpha=0.3)
triangles3d(x=c(2.2,2.2,0.8),y=c(2.2,0.8,0.8),z=b+c(1.2*aF+1.2*aD,-0.2*aD+1.2*aF,-0.2*aD-0.2*aF),col=adjustcolor("red",0),alpha=0.3)


Savez-vous comment faire pour avoir une vraie transparence ?

Christophe

PS : Non, ce message n'est pas diabolique...
--
Christophe
https://rplusplus.com

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: Changer les labels d'un graphe 3D (rgl)

Messagepar François Bonnot » 25 Oct 2017, 06:46

Bonjour,
Une solution : ajouter en fin de code la fonction points3d() avec les mêmes paramètres que plot3d().
François

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Re: Changer les labels d'un graphe 3D (rgl)

Messagepar Christophe Genolini » 27 Oct 2017, 18:17

Merci.
Mais ca n'est pas vraiment de la transparence, ca redessine les points. Or, s'il y avait transparence, les points que l'on voit "a travers" le plan devraient être d'une couleur atténuée. Ca aiderait la vision 3d, ce qui est d'ailleurs mon objectif...
--
Christophe
https://rplusplus.com

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Changer les labels d'un graphe 3D (rgl)

Messagepar Logez Maxime » 30 Oct 2017, 15:43

Bonjour,

en utilisant planes3d plutôt que les triangles3d mais peut-être qu'ils ont la même options (je n'ai pas vérifié) :

Code : Tout sélectionner

set.seed(13)
dn <- expand.grid(id=1,Fortune=c("Riche","Pauvre"),Diamant=c("Oui","Non"))
tab <- dn
dn <- dn[rep(1:4,times=c(50,5,10,100)),]
n <- nrow(dn)
dn$id <- 1:n
dn$Peste <- round(runif(n,0,ifelse(dn$Fortune=="Riche",10,30)),1)

library(rgl)
plot3d(dn$Fortune,dn$Diamant,dn$Peste,xlim=c(0.8,2.2),ylim=c(0.8,2.2),zlim=c(0,50),
       axes=FALSE,xlab="",ylab="",zlab="")
box3d()

axis3d(edge="x+", labels=c("Riche", "Pauvre"), nticks=2)
axis3d(edge="y", labels=c("Avec diam", "Sans diam"), nticks=2)
axis3d(edge="z++")

model <- lm(Peste~Fortune+Diamant,data=dn)
tab <- tab[c(3,2), ]
tab$z <- predict(model, newdata = tab[c(3, 2)])
cfs <- coef(model)

aF <- cfs[2]
aD <- -(cfs[3])

# pour (1,1) et (2,2) que valent z ?
z <- aF*c(1,2) + aD*c(1,2)
# cherche les coefficients c et d du plan de sorte que ax + by + cz + d = 0
cd <- solve(cbind(tab$z, 1), -z)

planes3d(aF, aD, cd[1], cd[2], col = 'red', alpha = 0.5, depth_mask = FALSE)
Cordialement,
Maxime

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Changer les labels d'un graphe 3D (rgl)

Messagepar Logez Maxime » 30 Oct 2017, 15:46

En fait tu n'as qu'a placer cette ligne de commande avant tes triangles :

Code : Tout sélectionner

rgl.material(depth_mask = FALSE)
Cordialement,
Maxime

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Re: Changer les labels d'un graphe 3D (rgl)

Messagepar Christophe Genolini » 30 Oct 2017, 15:48

J'ai trouvé : c'est un bug de RGL. Il y a une correction qu'on peut trouver sur la version RGL qui est sur R-forge.
--
Christophe
https://rplusplus.com


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité