R 绘图堆叠条形图添加跟踪循环问题

R 绘图堆叠条形图添加跟踪循环问题,r,shiny,R,Shiny,我正在plotly中构建一个堆叠条形图,每当我运行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))

我正在plotly中构建一个堆叠条形图,每当我运行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)时,trace1的值将自动等于trace2的值

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


感谢您的帮助,

您正在每个循环迭代中覆盖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")

编辑:


我得到了相同的结果。它没有被覆盖,因为我可以在绘图上看到name=colnames(dist_data)中的所有7个数据标签[j]你是对的,结果是相同的。虽然dist_data=mtcars,但该图对我来说很好。也许有一个pb和你的数据框?好吧,看看这些值。从第二个变量开始的所有值都是相同的,例如所有玛莎拉蒂·波拉都是8。最后它成功了:)仍然是一个相当大的挑战。你能帮我做最后一件事吗?dist_数据包含作为行名的日期,如何将x轴作为日期?我相信转换到xts在这里不是一个解决方案
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