【问题标题】:Plotly filter not working with transforms绘图过滤器不适用于变换
【发布时间】:2021-02-23 22:28:31
【问题描述】:

我制作了一个过滤后的堆积条形图,但是它显示了指定过滤器下不存在的条形的空白空间。

这是我的代码:

event <- c("eve1","eve2","eve3","eve1","eve3","eve4","eve3","eve1","eve1","eve2","eve3","eve4","eve2","eve1")
year <-c("2017","2017","2017","2018","2018","2019","2019","2019","2020","2020","Total","Total","Total","Total")
cat1 <- c(20,14,25,64,0,5,34,2,14,6,78,0,0,23)
cat2 <- c(0,4,0,4,3,9,0,2,4,12,8,42,31,2)

eve <- data.frame(event,year,cat1,cat2)

fig <- plot_ly(eve, x = ~event, y = ~cat1, type = 'bar', name = 'cat1',
               transforms = list(list(type = 'filter',target = ~year, operation = '=',value = eve$year))) %>% 
  add_trace(y = ~cat2, name = 'cat2')%>% 
  layout(yaxis = list(title = 'count'), barmode = 'stack', 
         updatemenus = list(list(type = 'dropdown',active = 0,buttons = 
                                   list(list(method = "restyle",
                                             args = list("transforms[0].value", unique(eve$year)[1]),
                                             label = unique(eve$year)[1]),
                                        list(method = "restyle",
                                             args = list("transforms[0].value", unique(eve$year)[2]),
                                             label = unique(eve$year)[2]),
                                        list(method = "restyle",
                                             args = list("transforms[0].value", unique(eve$year)[3]),
                                             label = unique(eve$year)[3]),
                                        list(method = "restyle",
                                             args = list("transforms[0].value", unique(eve$year)[4]),
                                             label = unique(eve$year)[4]),
                                        list(method = "restyle",
                                             args = list("transforms[0].value", unique(eve$year)[5]),
                                             label = unique(eve$year)[5])
                                        ))))

fig

为什么“eve2”没有出现在数据中,却出现在 2019 年?

【问题讨论】:

    标签: r plotly r-plotly


    【解决方案1】:

    几个月后找到了解决方案,将其发布以防其他人遇到类似问题。

    在layout下你需要指定categoryorder和categoryarray。这会阻止 Plotly 对可能干扰过滤器的转换元素的数据帧进行自动排序。

    以下是更正后的代码:

    event <- c("eve1","eve2","eve3","eve1","eve3","eve4","eve3","eve1","eve1","eve2","eve3","eve4","eve2","eve1")
    year <-c("2017","2017","2017","2018","2018","2019","2019","2019","2020","2020","Total","Total","Total","Total")
    cat1 <- c(20,14,25,64,0,5,34,2,14,6,78,0,0,23)
    cat2 <- c(0,4,0,4,3,9,0,2,4,12,8,42,31,2)
    
    eve <- data.frame(event,year,cat1,cat2)
    
    fig <- plot_ly(eve, x = ~event, y = ~cat1, type = 'bar', name = 'cat1',
                   transforms = list(list(type = 'filter',target = ~year, operation = '=',value = eve$year))) %>% 
      add_trace(y = ~cat2, name = 'cat2')%>% 
      layout(yaxis = list(title = 'count'),xaxis=list(categoryorder = "array",
                  categoryarray = eve$year), barmode = 'stack', 
             updatemenus = list(list(type = 'dropdown',active = 0,buttons = 
                                       list(list(method = "restyle",
                                                 args = list("transforms[0].value", unique(eve$year)[1]),
                                                 label = unique(eve$year)[1]),
                                            list(method = "restyle",
                                                 args = list("transforms[0].value", unique(eve$year)[2]),
                                                 label = unique(eve$year)[2]),
                                            list(method = "restyle",
                                                 args = list("transforms[0].value", unique(eve$year)[3]),
                                                 label = unique(eve$year)[3]),
                                            list(method = "restyle",
                                                 args = list("transforms[0].value", unique(eve$year)[4]),
                                                 label = unique(eve$year)[4]),
                                            list(method = "restyle",
                                                 args = list("transforms[0].value", unique(eve$year)[5]),
                                                 label = unique(eve$year)[5])
                                            ))))
    
    fig
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-07
      • 2018-10-04
      • 1970-01-01
      • 2020-02-06
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      相关资源
      最近更新 更多