dynamically adjust height and/or width of shiny-plotly output based on window size

后端 未结 1 984
耶瑟儿~
耶瑟儿~ 2020-12-06 02:33

I would like to have the shiny-plotly output height and width adjusted to the current window size. I have tried to use the below but of no use.

ShinyUi <-         


        
相关标签:
1条回答
  • 2020-12-06 03:30

    It does not answer your question but in line to my comments you can add the plot height and width to the ggplotly function using the js from this link.

    I have prepared a minimal example of what you are want.

    library(shiny)
    library(plotly)
    
    ShinyUi <- fluidPage(
      tags$head(tags$script('
                            var dimension = [0, 0];
                            $(document).on("shiny:connected", function(e) {
                            dimension[0] = window.innerWidth;
                            dimension[1] = window.innerHeight;
                            Shiny.onInputChange("dimension", dimension);
                            });
                            $(window).resize(function(e) {
                            dimension[0] = window.innerWidth;
                            dimension[1] = window.innerHeight;
                            Shiny.onInputChange("dimension", dimension);
                            });
                            ')),
    
          plotlyOutput("distPlot", width = "auto")
    
      )
    
    ShinyServer <- function(input, output, session) {
    
    
      #To make the responsive to the change in UI size
      observeEvent(input$dimension,{
    
        output$distPlot <- renderPlotly({
    
          p <- ggplot(iris, aes(x = Sepal.Length, y=Sepal.Width))  +
            geom_point(shape=1, alpha = 0.5, color = "grey50")
          ggplotly(p, width = (0.95*as.numeric(input$dimension[1])), height = as.numeric(input$dimension[2]))
    
        })
    
      })
    
    }
    
    
    # Run the application 
    shinyApp(ui = ShinyUi, server = ShinyServer)
    

    The output you get is as follows:

    Now when you make the window even smaller you still get a plot which occupies the whole screen (no scrollbars!) as follows:

    0 讨论(0)
提交回复
热议问题