首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分组框图的r策略下拉事件

分组框图的r策略下拉事件
EN

Stack Overflow用户
提问于 2020-06-08 08:24:02
回答 1查看 199关注 0票数 5

我想用一个缓慢的下拉事件来显示不同的分组框图,但是我还没有做到这一点:

第一个图显示了以下拉列表= "4“(使用ggplot获得)的预期输出。第二个情节是我得到的..。

代码语言:javascript
复制
library(tidyverse)
library(plotly)


dat <- mtcars %>%
    filter(cyl == 4 | carb == 4) %>%
    group_by(cyl, carb, am) %>%
    summarise(boxplot= list( setNames(boxplot.stats(disp)$stats,
                                      c('lower_whisker','lower_hinge','median','upper_hinge','upper_whisker')) )) %>%
    unnest_wider(boxplot) %>%
    arrange(cyl, carb, am) %>%
    ungroup() %>%
    mutate_at(vars(cyl, carb, am), as.character)

cylinders <- unique(dat$cyl)

dat %>% 
    filter(cyl == 4) %>%
    ggplot(aes(
        x = carb, 
        lower = lower_hinge, 
        upper = upper_hinge, 
        middle = median, 
        ymin = lower_whisker, 
        ymax = upper_whisker, 
        colour = am))  + 
    geom_boxplot(stat = "identity")

p <- plot_ly(type = "box")
for(icyl in cylinders){
  dataFilt <- filter(dat, cyl == icyl)
  p <- add_trace(p, 
               visible = TRUE,
               q1 = dataFilt$lower_hinge, 
               median = dataFilt$median,
               q3 = dataFilt$upper_hinge, 
               lowerfence = dataFilt$lower_whisker,
               upperfence = dataFilt$upper_whisker,
               x = dataFilt$carb,
           color = dataFilt$am,
               name=icyl
               )
}


p %>%
  layout(boxmode = "group",
      updatemenus = list(
      list(
        y = 0.8,
        buttons = list(

          list(label = cylinders[1],
               method = "update",
               args = list(list(visible = c(TRUE, FALSE, FALSE)))),
        list(label =  cylinders[2],
               method = "update",
               args = list(list(visible = c(FALSE, TRUE, FALSE)))),
          list(label =  cylinders[3],
               method = "update",
               args = list(list(visible = c(FALSE, FALSE, TRUE))))    
))))

EN

回答 1

Stack Overflow用户

发布于 2022-02-23 17:19:47

我无法让它与循环一起工作,但我确实让它像您所期望的那样工作。我没有使用所有手工制作铰链、胡须等的变体,而是使用了add_boxplot

layout中,您将看到有6T或F,这是因为plotly没有将分组保存为一个函数,而是将数据转换为两个单独的跟踪。例如,前两个是cyl == "4" & am == "0"cyl == "4" & am == "1"

代码语言:javascript
复制
cylinders <- unique(mtcars$cyl) # kept similar from original work

# added to simplify build
mtcars <- mtcars %>% mutate_at(vars(cyl, carb, am), as.character)

# made all cylinder options subplots
plot_ly() %>% 
  add_boxplot(x = ~carb, y = ~disp, color = ~am, colors = "Set2",
              data = mtcars[mtcars$cyl == cylinders[1], ],
              visible = T, inherit = F) %>%                 # visible
  add_boxplot(x = ~carb, y = ~disp, color = ~am, colors = "Set2",
              data = mtcars[mtcars$cyl == cylinders[2], ],
              visible = F, inherit = F) %>%                 # invisible
  add_boxplot(x = ~carb, y = ~disp, color = ~am, colors = "Set2",
              data = mtcars[mtcars$cyl == cylinders[3], ],
              visible = F, inherit = F) %>%                 # invisible
  layout(updatemenus = list(
    list(
      y = 0.8,
      buttons = list(
        list(label = cylinders[1],       # four cyl
             method = "restyle",
             args = list("visible", list(T, T, F, F, F, F))),
        list(label =  cylinders[2],      # six cyl
             method = "restyle",
             args = list("visible", list(F, F, T, T, F, F))),
        list(label =  cylinders[3],      # eight cyl
             method = "restyle",
             args = list("visible", list(F, F, F, F, T, T)))
      ) # end buttons
    )) # end updatedmenus list list
  ) # end layout

这是4 cyl plotly和您原来的4 cyl ggplot

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62257921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档