在没有渲染函数的情况下在 R Shiny 中显示 Plotly Plot

问题描述

我想在不使用渲染函数的情况下用 HTML 显示 Plotly 绘图,我已经研究过 htmltoolshtmlwidgets 但还没有找到解决方案。我可以使用 insertUI 函数在没有渲染函数的情况下渲染 Plotly 图,如下所示:

library(shiny)

# Define UI for application that draws a histogram
ui <- fluidPage(
    
    #shiny::singleton(
    #    tags$head(tags$script(src = "custom_message_handler.js"))
    #),div(
        id = "placeholder"
    )

)

# Define server logic required to draw a histogram
server <- function(input,output) {

    shiny::insertUI(
        "#placeholder","beforeBegin",ui = shiny::tagList(plotly::plot_ly(x = rnorm(100),y = rnorm(100)))
    )
    
    #shiny::observe({
        
     #   panel_plot(
      #      item = shiny::tagList(plotly::plot_ly(x = rnorm(100),y = rnorm(100)))
        #)
        
    #})
}

# Run the application
shinyApp(ui = ui,server = server)

但是,当我拥有自己的自定义消息处理程序时,Plotly 图将不会呈现。我想将 Plotly 图发送到 Javascript,我想在占位符 id 之后插入 Plotly 图。如何将 Plotly 图的输出发送到 JavaScript,然后像 insertUI 函数那样显示它?

这就是我到目前为止关于我自己的自定义消息处理程序的方式

panel_plot <- function(item,session = shiny::getDefaultReactiveDomain()) {
    session$sendCustomMessage(
        type = 'plots',message = list(panel = as.character(item))
    )
}

# Javascript/jQuery
$(function() {
  Shiny.addCustomMessageHandler('plots',function(message) {

    var panel_plot = $.parseHTML(message.panel);
    $(panel_plot).insertAfter($('#placeholder'));

  });
});

shiny::observe({
panel_plot(
            item = shiny::tagList(plotly::plot_ly(x = rnorm(100),y = rnorm(100)))
        )
})

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)