如何在R-Plotly的Crosstalk()中的filter_select()中设置默认值

问题描述

我正在开发一个带有基于情节的交互式图表的 rmarkdown HTML。虽然我可以在图表中完成我想要的所有事情,但来自 crosstalk() 的 filter_select() 不允许我在其中设置认值。所以我的图表在初始加载时看起来很笨拙而且很糟糕。

Selecting a default value in an R plotly plot using a selectize box via crosstalk in R,using static html not shiny

上面的讨论有一些输入,但我不知道如何在 crosstalk() 中进行这些编辑,因为我不熟悉 HTML/JS。有人可以帮我提供一些详细的方法吗,

谢谢

解决方法

借用链接问题中的示例,您可以先了解以下内容:

---
output:
  html_document
---

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


library(plotly)
# example data 
dat <- tibble::tribble(~filterBy,~x,~y,"a",1,"b",2,3,"c",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"
  )
```

您可以将已接受答案中的 js 粘贴到 r 代码末尾下方,就像您在第一个下方创建一个新的 {r} 块一样。

```{js}
function filter_default() {
    document.getElementById("filter").getElementsByClassName("selectized") 
[0].selectize.setValue("a",false);
 }
window.onload = filter_default;
```

要使其对起作用,您可能需要在 {js} 块中更改一些参数。

1. 首先,您需要回顾一下您用作 filter_select 元素标记的内容。这是第一个论点。在上面的示例中,filter_select("filter", 表示您已使用“过滤器”作为过滤器的标签。

假设我们使用“lantern”作为串扰过滤器的 id。您可以将 document.getElementById("filter") 中的 document.getElementById("lantern") 更改为 {js}

2. 接下来,您需要查看默认选择的值。在示例中,该值设置为“a”,并带有 selectize.setValue("a" 块中的 {js} 位。您可以选择数据中存在的任何值作为默认值。例如,如果您有源数据:

other_dat<-data.frame(light=c("bulb","sun","biological"),amount=c(50,1000,3))

您可以使用(请记住,我们已选择将 filter_select 标记为“灯笼”):

```{js}
function filter_default() {
    document.getElementById("lantern").getElementsByClassName("selectized") 
[0].selectize.setValue("bulb",false);
 }
window.onload = filter_default;
```

将默认的 filter_select 值设置为“bulb”,或者:

```{js}
function filter_default() {
    document.getElementById("lantern").getElementsByClassName("selectized") 
[0].selectize.setValue("sun",false);
 }
window.onload = filter_default;
```

将默认值设置为“sun”。