Выбор значения по умолчанию на графике R с использованием поля выбора через перекрестные помехи в R, с использованием статического HTML, а не блестящего

Как в html-документе Rmarkdown выбрать значение по умолчанию для раскрывающегося списка crossstalk :: filter_select, которое будет работать с графиками? Например, в примере ниже, чтобы при вязании RMD была выбрана только группа «а».

Я знаю, что для представленного ниже примера с использованием кнопок plotly было бы проще, но когда есть более 4-5 или около того вариантов, выпадающие списки / кнопки plotly занимают слишком много места / довольно уродливы. Также в надежде избежать запуска блестящего сервера, идея состоит в том, чтобы все работало на стороне клиента для повышения скорости.

Существует PR в перекрестных помехах, который добавляет аргумент выбора по умолчанию к функции filter_select, но эта версия не работает с plotly (https://github.com/rstudio/crosstalk/pull/70). Я предполагаю, что самым простым способом было бы добавить в документ javascript для управления объектом перекрестных помех, но несколько экспериментов еще не продвинулись очень далеко.

Представлять rmd:

---
output:
  html_document
---

```{r echo=FALSE, message=FALSE, warning=FALSE}


library(plotly)
# example data 
dat <- tibble::tribble(~filterBy, ~x, ~y,
                        "a", 1, 1,
                        "b", 2, 1,
                        "a", 1, 2,
                        "b", 2, 2,
                        "a", 1, 3,
                        "b", 2, 3,
                        "a", 1, 2,
                        "b", 2, 3,
                        "c", 3, 1,
                        "c", 3, 2,
                        "c", 3, 3
                        )  

# initializing a crosstalk shared data object  
plotdat <- highlight_key(dat)

# Filter dropdown
question_filter <- crosstalk::filter_select(
   "filter", "Select a group to examine",
   plotdat, ~filterBy, multiple = F
)

# Plotting:
plot <-  plot_ly( plotdat, 
    x = ~x, y = ~y, text = ~filterBy,  mode = "markers+text", 
    textposition = "top", hoverinfo = "x+y"
  )

# Just putting things together for easy display:
shiny::tags$div(class = 'flexbox',
                question_filter,
                shiny::tags$br(), 
                plot)


```

person FelixST    schedule 06.10.2020    source источник


Ответы (2)


Вы можете напрямую управлять полями выбора, которые перекрестно filter_select выходы, используя javascript, трюк запускает его при загрузке следующим образом:

```{js}
function filter_default() {
    document.getElementById("filter").getElementsByClassName("selectized")[0].selectize.setValue("a", false);
}
window.onload = filter_default;
```
person FelixST    schedule 11.10.2020
comment
Этот ответ мне помог. Для тех, кто не понимает js, я опубликовал небольшое объяснение в ответ на stackoverflow.com/questions/67058016/ - person Pake; 17.06.2021

Просто чтобы дополнить принятый ответ, который в моем случае работал в средстве просмотра RStudio, но не в Chrome / Edge / IE / Firefox: событие jQuery Document.ready решило проблему (идея из этой ветки)

$(document).ready(function() {
    document.getElementById("filter").getElementsByClassName("selectized")[0].selectize.setValue("a", false);
});
person Laszlo    schedule 15.02.2021