r - 为什么 Shiny 的应用程序使用突出显示功能和 selectize=TRUE 将虚假小部件添加到 Plotly 图表中?

标签 r shiny plotly highlight htmlwidgets

我用 ggplotly 制作了一个图表来显示 10 名参与者在三项测试中取得的结果。该图显示了按实验分组的散点图(个体参与者)和汇总统计数据(箱线图)。我添加了一个突出显示功能,并将 selectize 设置为 TRUE,以便用户可以在 filter_select 框中搜索特定参与者并在图表上突出显示该参与者的结果。

当我在没有 Shiny 的情况下运行代码时,我得到了预期的结果,即上面有一个过滤器选择框的图表,用于搜索参与者。 但是,当我在 Shiny 的应用程序中渲染 Plotly 图表时,我得到了一个额外的小部件,它似乎没有执行任何操作,但确实混淆了布局(运行下面的 Shiny 应用程序代码以查看效果)。

library(shiny)
library(plotly)
library(shinyWidgets)

dataset <- tibble(Name=rep(LETTERS[1:10],3),Result=sample(100,30),
                  Experiment=c(rep("T1",10),rep("T2",10),rep("T3",10)))

ui <- fluidPage(
  fluidRow(
       column(width = 10, offset = 1,
              plotlyOutput("graph")
       )
  )
)

server <- function(input, output, session) {

output$graph <- renderPlotly({

d <- highlight_key(dataset,~Name,group="Select participant")

p <- ggplot(d,aes(Experiment,Result,fill=Experiment,text=paste0("<b>Name: ",
                                          Name,"</b><br />Result: ",Result,"%"))) +
  geom_boxplot()+
  geom_point(size=2,position=position_jitterdodge(dodge.width = 0.4)#,
  )+ggtitle("Results by Experiment (all subjects)")+
  theme(legend.position="none",axis.text.x=element_text(size=15),
                 axis.title.x=element_text(color="red",size=15))

p <- ggplotly(p,tooltip=c("text"))

p <- style(p,hoverlabel=list(bgcolor="white",bordercolor="black",font="Arial"))

highlight(p,on="plotly_click",off="plotly_doubleclick",selectize=TRUE,color="green")
})
}

shinyApp(ui, server)

我想从plotlyOutput中删除这个虚假的小部件;我已经浏览了关于 Shiny plotly 突出主题的大量问题和答案,但没有一个与我遇到的问题类似。我想知道是否有人遇到过这个问题并找到了解决方案。我真的很感激任何对此的帮助。

最佳答案

看起来像一个错误。您可以像这样隐藏这个小部件:

ui <- fluidPage(
  fluidRow(
    column(width = 10, offset = 1,
           plotlyOutput("graph")
    )
  ),
  tags$script(
    "setTimeout(function(){$('#graph').prev().children()[1].style.display = 'none';}, 500);"
  )
)

编辑

这是一个更好的解决方案:

js <- '
$(document).on("shiny:value", function(e){
  if(e.name === "graph"){
    setTimeout(function(){
      $("#graph").prev().children()[1].style.display = "none";
    }, 0);
  }
});
'

ui <- fluidPage(
  tags$head(
    tags$script(HTML(js))
  ),
  fluidRow(
    column(width = 10, offset = 1,
           plotlyOutput("graph")
    )
  )
)

关于r - 为什么 Shiny 的应用程序使用突出显示功能和 selectize=TRUE 将虚假小部件添加到 Plotly 图表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60583349/

相关文章:

r - 求解一个变量的非线性方程,但以求和形式编写,在 "R"中

R:TM 包从单列中查找词频

angular - 如何在 Angular 2+ 包装器中向 plotly.js 添加数据点

javascript - 减少 Plotly.js 库的大小

javascript - 从 plotly 的任何地方 plotly 地点击事件

r - R 中系数相乘的非线性随机效应回归

r - 通过按钮/单击过滤数据表 (R Flexdashboard)

r - 隐藏 Shiny 的输出

r - 在shinyApp之后执行命令

r - 根据我在 ggplots 列表中的绘图数量创建多个 renderPlot 函数?