使用 static html not shiny 通过 R 中的串扰使用选择框在 R plotly plot 中选择默认值
Selecting a default value in an R plotly plot using a selectize box via crosstalk in R, using static html not shiny
在 Rmarkdown html 文档中,如何 select 一个 crosstalk::filter_select 下拉列表的默认值来处理绘图?例如,在下面的示例中,在编织 RMD 时仅组 'a' selected。
我知道对于下面的 reprex 示例,使用 plotly 按钮会更容易,但是当有超过 4-5 个左右的选择时,plotly dropdowns/buttons 占用太多 room/are 非常难看.也希望避免 运行 闪亮的服务器,想法是为了速度目的让所有 运行 客户端。
crosstalk 中有一个 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)
```
您可以使用 javascript 直接操作串扰 filter_select
输出的选择框,诀窍是在加载时触发它,如下所示:
```{js}
function filter_default() {
document.getElementById("filter").getElementsByClassName("selectized")[0].selectize.setValue("a", false);
}
window.onload = filter_default;
```
只是为了补充已接受的答案,就我而言,它在 RStudio 查看器中起作用,但在 Chrome/Edge/IE/Firefox 中不起作用:jQuery 事件 Document.ready 解决了问题(idea from this thread)
$(document).ready(function() {
document.getElementById("filter").getElementsByClassName("selectized")[0].selectize.setValue("a", false);
});
问题似乎已通过安装“rstudio/crosstalk#70”得到解决here。然后你就可以使用 select
选项
在 Rmarkdown html 文档中,如何 select 一个 crosstalk::filter_select 下拉列表的默认值来处理绘图?例如,在下面的示例中,在编织 RMD 时仅组 'a' selected。
我知道对于下面的 reprex 示例,使用 plotly 按钮会更容易,但是当有超过 4-5 个左右的选择时,plotly dropdowns/buttons 占用太多 room/are 非常难看.也希望避免 运行 闪亮的服务器,想法是为了速度目的让所有 运行 客户端。
crosstalk 中有一个 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)
```
您可以使用 javascript 直接操作串扰 filter_select
输出的选择框,诀窍是在加载时触发它,如下所示:
```{js}
function filter_default() {
document.getElementById("filter").getElementsByClassName("selectized")[0].selectize.setValue("a", false);
}
window.onload = filter_default;
```
只是为了补充已接受的答案,就我而言,它在 RStudio 查看器中起作用,但在 Chrome/Edge/IE/Firefox 中不起作用:jQuery 事件 Document.ready 解决了问题(idea from this thread)
$(document).ready(function() {
document.getElementById("filter").getElementsByClassName("selectized")[0].selectize.setValue("a", false);
});
问题似乎已通过安装“rstudio/crosstalk#70”得到解决here。然后你就可以使用 select
选项