使用下拉菜单在Plotly中隐藏子图

时间:2019-09-24 19:20:20

标签: r plotly r-plotly

我正在尝试在Plotly(在r中)中创建一个交互式图形,用户可以在其中选择分组变量。我已经设法通过堆叠条形图来做到这一点,但是我未能成功创建躲避的条形图。
以下是我要创建的示例(但在ggplot中完成)。当用户看到该图时,仅显示蓝色条,而x轴上的所有其他标签被隐藏。当用户选择分组变量时,蓝色条被隐藏,而灰色条被显示(x轴上的“ all”标签被隐藏)。
我实际上试图创建的图显然更复杂,但是为了演示,这里是一个简单的图)

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)
    ))

0 个答案:

没有答案