Я хочу создать интерактивную гистограмму в R с использованием перекрестных помех. В частности, я хочу использовать ползунок, чтобы выбрать, какие данные будут отображаться на гистограмме. Для этого я использовал следующий код:
shared_data <- highlight_key(mpg)
widgets <- bscols(
widths = 12,
filter_slider("displ", "displ", shared_data, ~displ))
bscols(widths = 10, widgets,
plot_ly(x = ~mpg$displ, type = "histogram",
histnorm = "probability"))
Это создает гистограмму, а также интерактивный ползунок. Однако на самом деле ползунок ничего не делает.
Я пробовал сделать это с помощью альтернативного фрагмента кода, но, как и в предыдущем коде, он создает гистограмму и ползунок, который не может фильтровать данные.
shared_data <- mpg %>%
SharedData$new()
plot_ref <- plot_ly(x = ~mpg$displ, type = "histogram",
histnorm = "probability") %>%
layout(title = "Reference Histogram (Displ)",
xaxis = list(title = "Displ"),
yaxis = list(title = "Percentage (%)"))
bscols(widths = 10,
list(filter_slider(id = "slider_ap", label = "Displ",
sharedData = shared_data, column = ~displ),
plot_ref))
Может ли кто-нибудь объяснить, что не так с кодом выше? Я где-то читал, что интерактивность перекрестных помех специально не оптимизирована для гистограмм, может ли это быть причиной того, что она не работает? Любая помощь приветствуется!
@Quinten SharedData
используется в bscols
при создании слайдера/интерактивной среды. Я действительно не знаю, как это объяснить, но фрейм данных сохраняется как тип «среды» либо с помощью shared_data <- mpg %>% SharedData$new()
, либо с помощью shared_data <- highlight_key(mpg)
. Документация crosstalk
, вероятно, объясняет это намного лучше, чем я: cran.r-project.org/web/packages/crosstalk/crosstalk.pdf
Цель SharedData
— поделиться данными. Когда вы вызывали график, вы не использовали общие данные, поэтому фильтр не мог сопоставить график.
Проверьте это:
shared_data <- mpg %>%
SharedData$new()
plot_ref <- plot_ly(data = shared_data, # <- share it
x = ~displ, type = "histogram",
histnorm = "probability") %>%
layout(title = "Reference Histogram (Displ)",
xaxis = list(title = "Displ"),
yaxis = list(title = "Percentage (%)"))
bscols(widths = 10,
list(filter_slider(id = "slider_ap", label = "Displ",
sharedData = shared_data, column = ~displ),
plot_ref))
Спасибо! Почему-то я думал, что SharedData
используется только в функции bscols
... моя ошибка! Спасибо еще раз!
где
SharedData
?