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

Posted

技术标签:

【中文标题】通过R中的串扰使用选择框在R plotly图中选择默认值,使用静态html不闪亮【英文标题】:Selecting a default value in an R plotly plot using a selectize box via crosstalk in R, using static html not shiny 【发布时间】:2021-01-21 20:26:31 【问题描述】:

在 Rmarkdown html 文档中,如何选择一个适用于情节图的 crosstalk::filter_select 下拉列表的默认值?例如,在下面的示例中,在编织 RMD 时只选择组“a”。

我知道对于下面的示例,使用 plotly 按钮会更容易,但是当有超过 4-5 个选项时,plotly 下拉菜单/按钮会占用太多空间/非常难看。还希望避免运行闪亮的服务器,这个想法是为了速度目的让所有东西都运行在客户端。

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)


```

【问题讨论】:

【参考方案1】:

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

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

window.onload = filter_default;
```

【讨论】:

这个答案对我有帮助。对于不理解js的朋友,我在回复***.com/questions/67058016/…时发了一点解释【参考方案2】:

问题似乎已通过安装“rstudio/crosstalk#70”解决here。然后您将能够使用select 选项

【讨论】:

【参考方案3】:

只是为了补充接受的答案,在我的例子中,它在 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);
);

【讨论】:

以上是关于通过R中的串扰使用选择框在R plotly图中选择默认值,使用静态html不闪亮的主要内容,如果未能解决你的问题,请参考以下文章

R Shiny 为 Plotly 折线图选择轨迹?

在 R 中的 plotly 饼图中使用自定义图标

R Plotly带颜色的下拉变量选择

无论如何要删除Plotly R图中y轴上的0?

R语言plotly可视化:plotly可视化在对比条形图中添加误差条散点图中添加误差条线图中添加误差条(Error Bars with plotly in R)

plotly R中的水平网格线