【问题标题】:Plotly stacked bar chart add_trace loop issue绘制堆积条形图 add_trace 循环问题
【发布时间】:2019-03-05 11:52:52
【问题描述】:

我正在绘制一个堆积条形图,每当我为 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 时,我的代码的其他部分有问题。 没有它有解决办法吗?

感谢您的帮助,

【问题讨论】:

    标签: r shiny


    【解决方案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")
    

    编辑:

    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
    

    【讨论】:

    • 我得到了相同的结果。
    • 它并没有被覆盖,因为我可以在我的绘图上看到来自 name = colnames(dist_data)[j] 的所有 7 个数据标签
    • 你是对的,结果是一样的。不过,这个情节对我有好处 dist_data = mtcars 。也许你的数据框有一个 pb?
    • 看看值。从第二个变量开始的所有值都是相同的,例如所有玛莎拉蒂宝拉都在 8。
    • 终于成功了:) 仍然是一个相当大的挑战。你能帮我做最后一件事吗? dist_data 包含日期作为行名,我怎么能将 x 轴作为日期?我相信在这里转换为 xts 不是解决方案
    猜你喜欢
    • 2021-05-07
    • 2012-09-17
    • 2021-12-27
    • 2016-05-24
    • 2021-10-07
    • 2018-06-05
    相关资源
    最近更新 更多