在闪亮的应用程序中将plotlyOutput()移动到服务器端

我有一个闪亮的仪表板,我想在其中使用.js.动态调整图形和框的高度,问题是,只有当我在plotlyOutput()内传递height参数并将其赋予input$GetScreenHeight,其中包含高度。但是我得到object 'input' not found。我可以仅将plotlyOutput()传递到内部的服务器吗?

jscode <-
  '$(document).on("shiny:connected",function(e) {
  var jsHeight = screen.height;
  Shiny.onInputChange("GetScreenHeight",jsHeight);
});
'

shinyApp(
  ui = dashboardPagePlus(
    header = dashboardheaderPlus(
    ),sidebar = dashboardSidebar(),body = dashboardBody(
      tags$script(jscode),boxPlus(
        title = "Closable Box with dropdown",closable = TRUE,width = NULL,status = "warning",solidHeader = FALSE,collapsible = TRUE,plotlyOutput("pl",height = input$GetScreenHeight)
      )
    )

  ),server = function(input,output) {

    output$pl <- renderPlotly({
      x    <- faithful[,2] 
      dat <- data.frame(xx = c(runif(100,20,50),runif(100,40,80),30)),yy = rep(letters[1:3],each = 100))

      p <- ggplot(dat,aes(x=xx)) +
        geom_histogram(data=subset(dat,yy == 'a'),fill = "red",alpha = 0.2) 

      p <- ggplotly(p)
    })
  }
)
zhuangmisi 回答:在闪亮的应用程序中将plotlyOutput()移动到服务器端

您可以将高度设置为plotlyOutput,而不是在服务器中移动ggplotly

  ggplotly(p,height = input$GetScreenHeight)

然后在height = 100%中设置plotlyOutput

plotlyOutput("pl",height = "100%")

也许高度screen.height并不是一个好的选择,它太大了。我建议:

jscode <-
  '$(document).on("shiny:connected",function(e) {
      var jsHeight = 0.4 * document.body.clientWidth; 
      Shiny.onInputChange("GetScreenHeight",jsHeight);
  });
'
本文链接:https://www.f2er.com/3115246.html

大家都在问