5 votes

Graphique à barres empilées R plotly avec plus de 100 catégories

J'ai un ensemble de données qui contient plus de 100 catégories. Si je veux le tracer, je dois écrire plus de 100 lignes de code pour cela. Voici l'exemple tiré du site officiel de plotly :

library(plotly)
Animals <- c("giraffes", "orangutans", "monkeys")
SF_Zoo <- c(20, 14, 23)
LA_Zoo <- c(12, 18, 29)
data <- data.frame(Animals, SF_Zoo, LA_Zoo)
p <- plot_ly(data, x = ~Animals, y = ~SF_Zoo, type = 'bar', name = 'SF Zoo') %>%
add_trace(y = ~LA_Zoo, name = 'LA Zoo') %>%
layout(yaxis = list(title = 'Count'), barmode = 'stack')

Comme vous pouvez le voir, si j'ai plus de 100 zoos qui vont être tracés, je dois écrire add_trace pour plus de 100 fois, ce qui est inefficace. Quelqu'un connaît-il des moyens de le simplifier ? J'ai essayé d'utiliser for boucle mais j'ai échoué.

Ou si quelqu'un sait comment utiliser ggplotly pour transférer un ggplot vers un format interactif, cela résoudra également mon problème. Le graphique produit par ggplot est un diagramme à barres groupées empilées dont l'axe des x a 10 facet_grid et environ 100 catégories dans chaque grille. J'ai essayé d'utiliser directement ggplotly et de le sauvegarder en tant que fichier .html mais l'échelle de l'intrigue est très bizarre. Il devrait ressembler à un rectangle d'une largeur d'environ 40 et d'une hauteur d'environ 8, mais en réalité, il n'y a pas d'échelle. html il s'agit simplement d'un carré illisible.

8voto

M-M Points 7149

Vous pouvez fondre les données et ensuite les tracer comme ci-dessous :

library(data.table)  
library(plotly)

data.table::melt(data, id.vars='Animals') %>%
plot_ly(x = ~Animals, y = ~value, type = 'bar', 
                name = ~variable, color = ~variable) %>%
      layout(yaxis = list(title = 'Count'), barmode = 'stack')

Cela va tracer :

enter image description here

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