首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用选择框通过R中的串扰在R中选择默认值,使用静态html不闪亮

使用选择框通过R中的串扰在R中选择默认值,使用静态html不闪亮
EN

Stack Overflow用户
提问于 2020-10-07 06:20:32
回答 3查看 1.2K关注 0票数 5

在Rmarkdown html文档中,如何为用于绘图的crosstalk::filter_select下拉菜单选择默认值?例如,在下面的例子中,在编织RMD时仅选择组'a‘。

我知道对于下面的reprex示例,使用绘图按钮会更容易,但当有4-5个左右的选择时,绘图下拉/按钮占用了太多空间/相当难看。同样希望避免运行一个闪亮的服务器,这个想法是为了速度的目的让一切都运行在客户端。

在串扰中有一个PR,它向filter_select函数添加了一个“默认选择”参数,但该版本不能与plotly (https://github.com/rstudio/crosstalk/pull/70)一起使用。我猜最简单的方法是将javascript添加到文档中来操纵串扰对象,但一些实验还没有走得太远。

Reprex rmd:

代码语言:javascript
复制
---
output:
  html_document
---

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

库(绘图)

示例数据

dat <- tibble::tribble(~filterBy,~x,~y,

代码语言:javascript
复制
                    "a", 1, 1,
代码语言:javascript
复制
                    "b", 2, 1,
代码语言:javascript
复制
                    "a", 1, 2,
代码语言:javascript
复制
                    "b", 2, 2,
代码语言:javascript
复制
                    "a", 1, 3,
代码语言:javascript
复制
                    "b", 2, 3,
代码语言:javascript
复制
                    "a", 1, 2,
代码语言:javascript
复制
                    "b", 2, 3,
代码语言:javascript
复制
                    "c", 3, 1,
代码语言:javascript
复制
                    "c", 3, 2,
代码语言:javascript
复制
                    "c", 3, 3
代码语言:javascript
复制
                    )  

初始化串扰共享数据对象

plotdat <- highlight_key(dat)

过滤器下拉列表

question_filter <- crosstalk::filter_select(

"filter",“选择要检查的组”,

plotdat,~filterBy,multiple =F

)

绘图:

plot <- plot_ly( plotdat,

代码语言:javascript
复制
x = ~x, y = ~y, text = ~filterBy,  mode = "markers+text", 
代码语言:javascript
复制
textposition = "top", hoverinfo = "x+y"

)

只是为了方便展示而把东西放在一起:

闪亮::标签$div(class= 'flexbox',

代码语言:javascript
复制
            question_filter,
代码语言:javascript
复制
            shiny::tags$br(), 
代码语言:javascript
复制
            plot)
代码语言:javascript
复制
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-23 18:59:19

这个问题似乎已经通过安装“rstudio/ here #70”得到了解决。然后,您将能够使用select选项

票数 2
EN

Stack Overflow用户

发布于 2020-10-12 07:41:18

你可以使用javascript直接操作串扰filter_select输出的选择框,诀窍是在加载时触发它,如下所示:

代码语言:javascript
复制
```{js}
function filter_default() {
    document.getElementById("filter").getElementsByClassName("selectized")[0].selectize.setValue("a", false);
}
window.onload = filter_default;
```
票数 7
EN

Stack Overflow用户

发布于 2021-02-16 07:07:09

作为对公认答案的补充,这个答案在我的例子中在RStudio查看器中起作用,但在Chrome/Edge/IE/Firefox中不起作用: jQuery event Document.ready解决了问题(idea from this thread)

代码语言:javascript
复制
$(document).ready(function() {
    document.getElementById("filter").getElementsByClassName("selectized")[0].selectize.setValue("a", false);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64234585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档