couleur mesh et autres questions sur le package plotly

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

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

couleur mesh et autres questions sur le package plotly

Messagepar Eric Wajnberg » 04 Aoû 2020, 10:47

Bonjour,

Y a t'il des personnes ici qui connaissent (bien) le package plotly ?

J'ai besoin de représenter des surfaces 3D, mais en mettant plusieurs surfaces sur le même graphe (en gérant les parties cachées, etc.). J'ai trouvé le package plotly et j'arrive bien à avoir le type de graphe que je veux. En revanche, impossible de fixer la couleur des surfaces représentées, par exemple, je veux deux surfaces sur le même graphe de deux couleurs différentes (et qui ne tiennent pas compte des valeurs en z).

Je n'arrête pas d'éplucher la documentation, mais rien n'y fait.

Par ailleurs, je veux que les surfaces représentées soient "à facettes", comme le fait par défaut la fonction native persp(). Impossible de représenter les arêtes des facettes. Ici aussi, quelqu'un sur ce forum saurait faire ceci ?

A défaut, si vous connaissez d'autres moyens/packages pour faire le genre de représentations dont j'ai besoin, merci de les signaler ici.

D'avance merci pour toute aide sur ce point.

Cordialement, Eric.

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: couleur mesh et autres questions sur le package plotly

Messagepar Facundo Muñoz » 04 Aoû 2020, 12:00

Bonjour,

je ne maîtrise pas trop {plotly} (au délà de la fonction `ggplotly()`). Peut-être ce site [1] vous donne des pistes ?

Sinon, auriez vous un code reproductible pour faire de preuves ?

Cordialement,

[1] https://plotly.com/r/3d-charts/
ƒacu.-

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: couleur mesh et autres questions sur le package plotly

Messagepar Eric Wajnberg » 04 Aoû 2020, 12:52

Merci pour votre réponse. Oui, je commence à bien connaitre ce site que vous citez (et d'autres).

Voici un code bidon qui fait un graphe 3D avec les deux surfaces. Impossible de faire figurer les arrêtes, et impossible de changer les couleurs.

Code : Tout sélectionner

function () 
{
        library(plotly)
        vecteur1=c(1,3,7)
        vecteur2=c(10,12,14)
        z=outer(vecteur1,vecteur2,"*")
        z2=z+10

        axx 
<- list(
                nticks = 10,
                title = "Premier axe",
                range = c(0,10)
                )
        axy <- list(
                nticks = 10,
                title = "Deuxieme axe",
                range = c(10,14)
                        )
        axz <- list(
                nticks = 10,
                range = c(0,120)
        )

fig <- plot_ly(x=~vecteur1, y=~vecteur2, z = ~z,type="mesh3d", showscale = FALSE)
        fig <- fig %>% add_surface(z=~z, opacity=0.6, type="mesh3d") 
        fig 
<- fig %>% add_surface(= ~z2, opacity = 0.6, type="mesh3d") 
        fig 
<- fig %>% layout(scene = list(xaxis=axx,yaxis=axy,zaxis=axz),title = "3D plot")
        fig
}

Toute aide sur ces points serait la bienvenue.

Eric.

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: couleur mesh et autres questions sur le package plotly

Messagepar Facundo Muñoz » 04 Aoû 2020, 14:14

Rebonjour,

vraiment, la documentation est un peu... dense...
Mais bon, c'est cela ce que vous vouliez ?

Code : Tout sélectionner

library(plotly)
vecteur1=c(1,3,7)
vecteur2=c(10,12,14)
z=outer(vecteur1,vecteur2,"*")

plot_ly(
  x = vecteur1,
  y = vecteur2,
  cmin = 0,
  cmax = 1,
  colors = c('red', 'blue'),
  showscale = FALSE
) %>%
  add_surface(
    z = ~ z,
    surfacecolor = structure(rep(0, length(z)), dim = dim(z)),
    contours = list(
      x = list(show = TRUE),
      y = list(show = TRUE)
    )
  ) %>%
  add_surface(
    z = ~ z + 30,
    surfacecolor = structure(rep(1, length(z)), dim = dim(z))
  )


Image

Pour référence, je me suis appuyé sur les sources suivantes :

- https://stackoverflow.com/questions/461 ... t-surfaces
- https://plotly.com/r/3d-surface-plots/# ... our-levels

Cordialement,
ƒacu.-

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: couleur mesh et autres questions sur le package plotly

Messagepar Eric Wajnberg » 04 Aoû 2020, 14:37

Oui, ça correspondant sensiblement à ce que je cherche à faire. Je n'aurais pas pu trouver seul.

J'ai essayer de "jouer" avec l'argument coutours - notamment pour changer l'épaisseur et la couleur des arrêtes. Sans succès (et - encore une fois - la documentation n'est pas facile d'accès).

Dans tous les cas, je pense que je peux continuer à construire les graphiques dont j'ai besoin.

Un grand merci !

Eric.

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: couleur mesh et autres questions sur le package plotly

Messagepar Eric Wajnberg » 04 Aoû 2020, 14:57

Eric Wajnberg a écrit :Oui, ça correspondant sensiblement à ce que je cherche à faire. Je n'aurais pas pu trouver seul.

J'ai essayer de "jouer" avec l'argument coutours - notamment pour changer l'épaisseur et la couleur des arrêtes. Sans succès (et - encore une fois - la documentation n'est pas facile d'accès).

Dans tous les cas, je pense que je peux continuer à construire les graphiques dont j'ai besoin.

Un grand merci !

Eric.

Non, en fait un reste un problème. Les arrêtes (rajoutées par l'argument contours) sont rajoutées à l’endroit des nticks des axes, pas à l'endroit des valeur mesurées (comme c'est le cas dans les graphes construits par la fonction native persp()). Si les valeurs mesurées étaient sur une grille régulière, je pourrais m'en sortir avec les arguments start, end and size de la liste founie à contours, mais ce n'est pas le cas. Encore une fois persp() est capable de mettre ces arrêtes aux bon endroits. Est-ce possible avec plotly ?

Encore une fois, merci pour toute aide sur ce point.

Eric.

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: couleur mesh et autres questions sur le package plotly

Messagepar Facundo Muñoz » 04 Aoû 2020, 15:25

Je vois...

Il me semble qu'avec cet approche ce n'est pas possible, car les contours ont un "start" and "end" et un step "size" [1] donce semblent prévus pour un espacement régulier.

Peut-être vous pouvez chercher un autre moyen, genre utiliser "add_contour()" ou "add_lines()" ou bien "add_trace()" pour ajouter les lignes séparément des surfaces.

Si vous trouvez, n'hésitez pas à mettre la solution dans le forum pour référence.

Cordialement,

[1] https://plotly.com/r/reference/#surface-contours
ƒacu.-

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: couleur mesh et autres questions sur le package plotly

Messagepar Eric Wajnberg » 04 Aoû 2020, 15:32

C''est ce que j'avais cru comprendre. Je vais continuer à chercher. Merci.

Eric.

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: couleur mesh et autres questions sur le package plotly

Messagepar Eric Wajnberg » 05 Aoû 2020, 14:41

Eric Wajnberg a écrit :C''est ce que j'avais cru comprendre. Je vais continuer à chercher. Merci.

Eric.

Bon, je crois qu'en fait on peut juste s'en sortir avec persp(), tout bêtement, en insérant un "par(new=TRUE)" entre les différents plots et en jonglant sur la transparence des couleurs pour gérer les parties cachées. C'est beaucoup plus simple, et ça marche aussi bien, sinon mieux, en fait.

Je reprends ici l'exemple bidon que j'avais donné précédemment, avec la solution avec persp() au cas où ceci servirait à d'autres.

Code : Tout sélectionner

function () 
{
        vecteur1=c(1,3,7)
        vecteur2=c(10,12,14)
        z=outer(vecteur1,vecteur2,"*")
        z2=z+10

        persp
(vecteur1,vecteur2,z,zlim=c(0,110),zlab="z",col=rgb(0,0,1,.15),border="white",
                        ticktype="detailed", phi=25, theta=30)
        par(new=TRUE)
        persp(vecteur1,vecteur2,z2,zlim=c(0,110),zlab="",col=rgb(1,0,0,.15),border="white",
                        box=F, phi=25, theta=30)
}

Cordialement, Eric.


Retourner vers « Questions en cours »

Qui est en ligne

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