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