Скрыть подплот в Plotly с выпадающим - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь создать интерактивный график в Plotly (на r), где пользователь может выбрать переменную группировки.Мне удалось сделать это с гистограммой с накоплением, но мне не удалось создать уклоненный гистограмму.
Ниже приведен пример того, что я хотел бы создать (но сделано в ggplot).Когда пользователь видит график, отображается только синяя полоса, а все остальные метки на оси X скрыты.Когда пользователь выбирает переменную группировки, синяя полоса скрыта, но отображаются серые полосы (а метка «все» на оси x скрыта).
( График, который я на самом деле пытаюсь создать,очевидно более сложный, но для демонстрации вот простой график)

Example graph

Сюжетная часть
СейчасЯ понимаю, что для создания фасета (как в ggplot) мне нужно использовать plotly :: subplot ().Мне почти удалось создать то, что я хочу в графике, но оси для скрытых баров все еще видны.Я могу только скрыть бары, там много пустого пространства.
Example plot in plotly

Мой вопрос
Могу ли я показать / скрытьсюжетные?Если нет, есть ли обходной путь, например, скрыть ось для подзаговора.

Пример кода

# Packages ----
library(dplyr)
library(plotly)


# Data ----
data1 <- cbind(
  "all", 
  iris %>% summarise(
    m = mean(Sepal.Width)
  )) %>% as_tibble()
names(data1)[1] <- "Species"
data2 <- group_by(iris, Species) %>% 
  summarise(
    m = mean(Sepal.Width))
data <- rbind(data1, data2)


# Plot ----
# Plot grand mean
graph1 <- filter(data, Species == "all") %>%
  plot_ly() %>%
  add_bars(name = label_x,
           x = ~Species, y = ~m,
           visible = TRUE)
# Plot mean for groups
graph2 <- filter(data, Species != "all") %>% 
  plot_ly() %>%
  add_bars(name = label_x,
           x = ~Species, y = ~m,
           visible = FALSE) # groups hidden by default
# Combine plots
graph <- plotly::subplot(graph1, graph2, shareY = TRUE)


# Create a filter -----
my_filter <- list(
  #1st filter - Only show 'All'
  list(
    label = "all",
    args = list(
      list(visible = c(TRUE, FALSE, FALSE, FALSE))
    )
  ),
  #2nd filter - Only show 'groups'
  list(
    label = "groups",
    args = list(
      list(visible = c(FALSE, TRUE, TRUE, TRUE))
    )
  )
)


# Edit plot ----
graph %>% 
  layout(
    updatemenus = list(
      list(y = 0.9,
           buttons = my_filter)
    ))
...