我正在尝试在Plotly(在r中)中创建一个交互式图形,用户可以在其中选择分组变量。我已经设法通过堆叠条形图来做到这一点,但是我未能成功创建躲避的条形图。
以下是我要创建的示例(但在ggplot中完成)。当用户看到该图时,仅显示蓝色条,而x轴上的所有其他标签被隐藏。当用户选择分组变量时,蓝色条被隐藏,而灰色条被显示(x轴上的“ all”标签被隐藏)。
(我实际上试图创建的图显然更复杂,但是为了演示,这里是一个简单的图)
密谋部分
现在,据我了解,要创建一个构面(如ggplot中的构面),我需要使用plotly :: subplot()。我几乎设法在绘图中创建了我想要的东西,但是隐藏条的轴仍然可见。我只能隐藏酒吧,那里有很多空白。
我的问题
我可以显示/隐藏子图吗?如果没有,是否有解决方法,例如隐藏子图的轴。
示例代码
# 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)
))