散乱堆积的条形图add_trace循环问题

时间:2019-03-05 11:52:52

标签: r shiny

我正在按图绘制堆积的条形图,每当我为add_trace运行循环时,都会出现一个问题,因为在保留名称的情况下,先前跟踪的数据似乎消失了。

        p = plot_ly( x = rownames(dist_data), y = as.numeric(dist_data[,1]), type = 'bar', name = colnames(dist_data)[1])%>%
      layout(legend = list(x = 0.1, y = 0.9))

    for ( j in 2:length(colnames(dist_data)))
    {
      p =  add_trace(p, y = ~as.numeric(dist_data[,j]), type = 'bar',name = colnames(dist_data)[j]) %>%
        layout( barmode = 'stack')
    }
    p

我想知道循环中是否有问题。 手动尝试添加trace1时,工作正常。添加迹线2(j = 3)时,迹线1的值将自动等于迹线2的值。

UPD::使用dplyr时,我的代码的其他部分有问题。 没有它,有解决方案吗?

感谢您的帮助,

1 个答案:

答案 0 :(得分:1)

您将在每次循环迭代中覆盖p。试试:

p =  p %>% add_trace(y = ~as.numeric(dist_data[,j]), type = 'bar',name = colnames(dist_data)[j]) %>%
        layout( barmode = 'stack')

第二次修改: 不知道为什么会这样。如果将其整形为长格式数据框,则比使用for循环更好的做法是有效的:

mtcars %>% 
  mutate(id = rownames(.)) %>%
  gather(key = "variable",value = "value",-id) %>% 
  plot_ly(x = ~id, y=~value, type="bar", color=~variable) %>%
  layout(barmode = "stack")

enter image description here

编辑:

dist_data=mtcars
p = plot_ly( x = rownames(dist_data), 
             y = as.numeric(dist_data[,1]), 
             type = 'bar', name = colnames(dist_data)[1]) %>%
  layout(legend = list(x = 0.1, y = 0.9))

for ( j in 2:length(colnames(dist_data))){
  p =  add_trace(p, y = ~as.numeric(dist_data[,j]), 
type = 'bar',name = colnames(dist_data)[j]) %>%
    layout( barmode = 'stack')
}
p