问题描述
我正在开发一个带有基于情节的交互式图表的 rmarkdown HTML。虽然我可以在图表中完成我想要的所有事情,但来自 crosstalk() 的 filter_select() 不允许我在其中设置默认值。所以我的图表在初始加载时看起来很笨拙而且很糟糕。
上面的讨论有一些输入,但我不知道如何在 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”。