Stop the right sidebar in shinydashboardPlus from hiding the body of the app

╄→гoц情女王★ 提交于 2021-01-28 10:55:50

问题


is it possible to stop the right hand sidebar in shinydashboardPlus from hiding part of the main body the app?

The default behaviour for a regular left sidebar panel is not to hide any part of the main body of the app. For example, in the below the left sidebar is clicked and the plot is moved to the right (you can see all parts of the plot).

With the right sidebar panel is clicked this behaviour does not happen (see below screenshot).

The sidebar is clicked and the plot is partially hidden by the panel. How can I stop this behaviour and make it so that once clicked the plot is moved left/rescaled to fit the body so that I don't hide part of the plot?

Example code

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
data(iris)

header <- dashboardHeaderPlus(
  enable_rightsidebar = TRUE,
  rightSidebarIcon = "filter"
)

sidebar <- dashboardSidebar(selectInput(inputId = "slect",
                                        label = "Selection Menu", 
                                        selected = "a",
                                        choices = LETTERS[1:3])
)

body <- dashboardBody(fluidPage(plotOutput( "scatter", 
                                  height = "700px", 
                                  width = "700px")))

rightsidebar <- rightSidebar()

ui <- dashboardPagePlus(header, 
                        sidebar, 
                        body, 
                        rightsidebar)

server <- function(input, output) {
    output$scatter <- renderPlot({
    plot(iris$Petal.Length, iris$Petal.Width, pch=21)
      cats <- levels(iris$Species)
      cols <- c("red", "blue", "yellow2")
      ind <- lapply(cats, function(z) which(iris$Species == z))
      for (i in seq(cats)) {
        points(iris$Petal.Length[ind[[i]]], iris$Petal.Width[ind[[i]]], 
               pch = 19, col = cols[i])
      }
    })
}

shinyApp(ui, server)

Session info:

> sessionInfo()
R version 4.0.0 (2020-04-24)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Catalina 10.15.6

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats4    parallel  stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] shinydashboardPlus_0.7.5 shinydashboard_0.7.1     shinyWidgets_0.5.3       dendextend_1.13.4       
 [5] tidyr_1.1.0              patchwork_1.0.1          ggplot2_3.3.1            shinyhelper_0.3.2       
 [9] colorspace_1.4-1         colourpicker_1.0         shinythemes_1.1.2        DT_0.13                 
[13] shiny_1.4.0.2            dplyr_1.0.0              MSnbase_2.14.2           ProtGenerics_1.20.0     
[17] S4Vectors_0.26.1         mzR_2.22.0               Rcpp_1.0.4.6             Biobase_2.48.0          
[21] BiocGenerics_0.34.0 

回答1:


The 1st problem is, that plotOutput shouldn't have a fixed width of 700px if you're expecting it to resize.

The second issue is, that clicking the right sidebar doesn't trigger a resize event (same issue as here) for shinydashboard's left sidebar. I fixed it via JS:

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
data(iris)

header <- dashboardHeaderPlus(enable_rightsidebar = TRUE,
                              rightSidebarIcon = "filter")

sidebar <- dashboardSidebar(
  selectInput(
    inputId = "slect",
    label = "Selection Menu",
    selected = "a",
    choices = LETTERS[1:3]
  )
)

body <- dashboardBody(
  tags$script('
      $(".navbar-custom-menu").on("click",function(){
        $(window).trigger("resize");
      })'
  ),
  fluidPage(
    plotOutput(
      "scatter",
      height = "700px",
      width = "100%"
    )
  ))

rightsidebar <- rightSidebar()

ui <- dashboardPagePlus(header,
                        sidebar,
                        body,
                        rightsidebar)

server <- function(input, output) {
  output$scatter <- renderPlot({
    plot(iris$Petal.Length, iris$Petal.Width, pch = 21)
    cats <- levels(iris$Species)
    cols <- c("red", "blue", "yellow2")
    ind <- lapply(cats, function(z)
      which(iris$Species == z))
    for (i in seq(cats)) {
      points(iris$Petal.Length[ind[[i]]],
             iris$Petal.Width[ind[[i]]],
             pch = 19,
             col = cols[i])
    }
  })
}

shinyApp(ui, server)



来源:https://stackoverflow.com/questions/63832380/stop-the-right-sidebar-in-shinydashboardplus-from-hiding-the-body-of-the-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!