2017-07-05 17 views
1

我有一个包含超过100个类别的数据集。如果我要绘制它,我必须为它编写超过100行代码。下面是从plotly官方网站的例子:R积攒叠加超过100个类别的条形图

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

正如你所看到的,如果我有100多个动物园那将是阴谋,我需要写“add_trace”超过100倍,这是低效的。 有没有人知道如何做到这一点?我尝试使用for循环但失败。 :(

或者,如果有人知道如何使用ggplotly将ggplot转换为交互格式,它也将解决我的问题ggplot生成的图是一个堆积的分组条形图,其中x轴有10个facet_grid每个网格大约有100个类别,我尝试直接使用ggplotly并将其保存为.html,但是这个图的比例非常奇怪,它应该看起来像一个宽度大约为40,高度大约为8的矩形,但在html中,它只是显示像一个方形是不可读

谢谢

+1

这听起来像你需要重塑你的数据集中到长格式。 [这](https://stackoverflow.com/questions/34140473/plotting-multiple-lines-on-plotly)是我发现的最接近的* plotly *问题,但有很多* ggplot2 *问题和答案在这个主题。 – aosmith

+0

@aosmith谢谢;)。但这不是我正在寻找的。 – Eleanor

+0

你是说你不想重塑你的数据集?你可能会澄清你的问题,然后,包括添加* ggplot2 *代码,使你想要的阴谋,你想*重现*阴谋*。 – aosmith

回答

1

可以融化的数据,然后绘制它们象下面这样:!

library(data.table) 
data.m <- data.table::melt(data, id.vars='Animals') 

library(plotly) 
plot_ly(data.m, x = ~Animals, y = ~value, type = 'bar', 
       name = ~variable, color = ~variable) %>% 
     layout(yaxis = list(title = 'Count'), barmode = 'stack') 

这将绘制:

enter image description here