R plotly stacked bar chart with over 100 categorie

2019-06-23 02:30发布

问题:

I have a dataset that contains over 100 categories. If I am going to plot it, I have to write over 100 lines code for it. Here is the example from plotly official website:

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')

As you can see, if I have over 100 zoos that going to be plot, i need to write 'add_trace' for over 100 times, which is inefficient. Does any one know ways to do it simply? I try to use for loop but failed. :(

Or, if any one know how to use ggplotly to transfer a ggplot to an interactive format, it will also solve my problem. The plot produced by ggplot is a stacked grouped bar chart which x-axis have 10 facet_grid and about 100 categories in each grid. I tried to use ggplotly directly and save it as an .html, however, the plot's scale is very weird. It should looks like a rectangular with width about 40 and height about 8, but in html, it just shows like a square which is unreadable.

Thank you!

回答1:

You can melt the data and then plot them like below:

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')

This will plot: