我用 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/