7 votes

Plotly R : réglage de l'espacement entre les étiquettes d'axe et de ticks d'axe

Existe-t-il un moyen de définir un espacement entre les étiquettes d'axe et les étiquettes de ticks d'axe autre que la modification des marges ?

Exemple de tracé :

plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000'))

Comme dans l'exemple ci-dessus, le titre de l'axe des y chevauche les étiquettes des tics de cet axe. Existe-t-il un moyen de définir un espacement entre eux ?

6voto

Salim B Points 475

Augmenter la marge de gauche comme le suggère @Codutie dans sa réponse n'aide que dans une certaine mesure (du moins dans Plotly v4.7.1+). La majeure partie de la marge de 150 pixels sur la gauche est de l'espace perdu, comme on peut le voir dans la capture d'écran ci-dessous : enter image description here

Code R pour générer le graphique ci-dessus (de @Codutie) :

library(plotly)

plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000')) %>%
  layout(margin = list(l = 150, r = 20, b = 10, t = 10))

Plotly ayant pour objectif d'être réactif, il effectue automatiquement une grande partie de la mise à l'échelle de la mise en page - ce qui est généralement une bonne chose à mon avis, car vous n'avez pas besoin de trop bricoler pour obtenir un graphique présentable. Bien sûr, les résultats de la mise à l'échelle automatique de Plotly ne sont pas toujours parfaits ou ne correspondent pas exactement à ce que l'on souhaite obtenir, et c'est la raison pour laquelle il existe de nombreux attributs (de mise en page) dédiés vous permettant de manipuler certains aspects de votre intrigue. Malheureusement, il n'existe pas d'attribut permettant de définir la distance entre l'étiquette d'un axe et l'axe lui-même. (ou les étiquettes des axes).

Au lieu de cela, vous pouvez compter sur la solution de contournement suivante pour manipuler la distance entre l'axe et son étiquette en définissant une chaîne de titre appropriée pour l'axe des ordonnées :

plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000')) %>%
    layout(margin = list(l = 150, r = 20, b = 10, t = 10),
           yaxis = list(title = paste0(c(rep(" ", 20),
                                         "Gross horsepower",
                                         rep(" ", 20),
                                         rep("\n ", 3)),
                                       collapse = "")))

Cela se traduit par : enter image description here

Explication des composants du titre de l'axe des ordonnées :

  • rep("\n ", 3) : C'est la partie principale de l'astuce pour augmenter la distance - il suffit de suffixer le titre actuel ( "Gross horsepower" ) avec des nouvelles lignes et des espaces insécables.
  • rep(" ", 20) : Il s'agit d'une mesure supplémentaire pour s'assurer que la mise à l'échelle automatique de Plotly n'interfère pas à nouveau - en enveloppant le titre réel dans 40 espaces insécables (il pourrait y en avoir plus/moins bien sûr). Sinon, le texte Puissance brute serait placé entre deux ticks d'axe dès que la hauteur de la parcelle est suffisamment grande pour le permettre "physiquement" - ce qui ferait échouer notre tentative de définir manuellement la distance parce que nous devrions utiliser un combo newline-non-breaking-space beaucoup plus grand pour obtenir à nouveau la même distance et - plus important encore - la distance dépendrait de la hauteur de la parcelle. Dans le graphique ci-dessus, ce n'est pas vraiment nécessaire, car il y a autant de ticks sur l'axe des y qu'il faudrait afficher le graphique avec une hauteur bien supérieure à 1000px pour atteindre ce point critique.

2voto

Codutie Points 806

Vous pouvez essayer de modifier les marges en les ajoutant à votre graphique comme ceci :

m <- list(l=150, r=20, b=10, t=10) # l = left; r = right; t = top; b = bottom
plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000')) %>% layout(margin=m)

J'espère que cela vous aidera ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X