我希望使用plotly下拉事件显示不同分组的箱线图,但是迄今为止我还没有实现:
第一个图显示了预期的plotly输出,其中dropdown = "4"(使用ggplot获得)。第二个图是我得到的...
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))))
))))