Shinydashboard: неправильная вертикальная визуализация элементов во вкладке - PullRequest
1 голос
/ 30 января 2020

Я использую shinydashboards tabboxes и у меня возникают проблемы с вертикальным выравниванием fluidrows внутри tabbox, из-за чего кнопка отображается поверх моего графика.

Первая вкладка в tabbox содержит график и кнопку загрузки, каждая в своем собственном FluidRow, вторая вкладка содержит datatable и кнопку загрузки, каждая в своем собственном FluidRow. График представляет собой facet_grid, и чтобы сделать его видимым, я указал высоту графика на моем сервере. График отображается правильно, но UI не реагирует на указанную высоту при рендеринге кнопки и отображает кнопку в верхней части графика.

Я также указываю высоту объекта с данными для вкладки данных на сервере, используя; renderDataTable(options = list(scrollY = "400px"){}.

В этом случае кнопка на вкладке данных отображается в правильном вертикальном положении под таблицей данных.

Ниже приведен воспроизводимый пример структуры панели мониторинга. Любая информация о том, почему кнопка на вкладке графика отображается поверх графика, будет очень благодарна.

Спасибо


library(shiny)
library(shinyBS)
library(shinydashboard)
library(dplyr)
library(ggplot2)
library(lubridate)
library(DT)
library(tidyr)

# load data in long format
dat <- mtcars
dat <- dat %>%
  select(c("mpg", "cyl", "disp", "drat", "wt")) %>%
  gather(key = "key", value = "value", cyl, disp, drat, wt )


#############################
#The dashboard
############################

header <- dashboardHeader(title = "Title", titleWidth = 450)

sidebar <- dashboardSidebar(
  sidebarMenu(
    menuItem("Model", icon = icon("dashboard"), tabName = "model")
  )
)

body <- dashboardBody(
  tabItems(

    #====================================
    tabItem(tabName = "model",
            #===========
          fluidRow(
                           tabBox(side="left",
                                  width = 8,
                                  height = "700px",
                                  title = "",
                                  id = "model_tab",
                                  tabPanel("Graph",
                                           column(width = 12,
                                                    fluidRow(
                                                      plotOutput("plot")
                                                      ), # close fluidRow
                                                    fluidRow(
                                                      downloadButton("plot_download")
                                                      )  #close fluidRow
                                                ) #close column
                                          ),   #close tabPanel

                                  tabPanel("Data",
                                             column(width = 12,
                                               fluidRow(
                                                 DT::dataTableOutput("data", 
                                                                   height = "350px")
                                                 ), #close fluidRow
                                               fluidRow(
                                                 downloadButton("data_download")
                                                ) # close fluidRow
                                             ) #close column
                                          ) # close tabPabel
                           ), # close tabBox

            #=========== 
            sidebarPanel(width = 4,
                         align = "left",

                         title = "User controls",
                         color = "fuchsia", 
                         solidHeader = TRUE, 

                         sliderInput("mpg",
                                "mpg",
                                min = 1,
                                max = 100,
                                value = 10),


                         sliderInput("cyl",
                                        "cyl",
                                        min = 5,
                                        max = 50,
                                        value = 10),


                         sliderInput("disp",
                                        "disp",
                                        min = 5,
                                        max = 50,
                                        value = 10),


                         sliderInput("drat",
                                        "drat",
                                        min = 100,
                                        max = 300,
                                        value = 155),



                         dateRangeInput("date_range", 
                                   "Date range", 
                                   start=as.Date('2020-04-01') , 
                                   end = as.Date('2025-03-01'),
                                   format = "yyyy-mm-dd")#,


          )  #close sidebarpanel
          ) #close fluidRow
        )  #close tabItem
  ) #close tabItems
)  #close dashboardBody

#################################################
ui <- dashboardPage(header, 
                    sidebar, 
                    body, 
                    skin= "purple")
#################################################

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




   output$plot <- renderPlot({
     plt <- ggplot(dat, aes(x=value, y=mpg))+
       geom_point()+
       facet_grid(rows=vars(unique(dat$key)))
     plt

   plt
  }, height = 600)





  output$plot_download <- downloadHandler(
    filename = function() { paste(input$dataset, '.png', sep='') },
    content = function(file) {
      png(file)
      print(plotInput())
      dev.off()
    })


  output$data <- renderDataTable(options = list(scrollY = "400px"), {
    dat
  })

  output$HOW_data_download <- downloadHandler(
    filename = "data.csv",
    content = function(file) {
      write.csv(dat, file, row.names = FALSE)
    }
  )

  }


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


1 Ответ

0 голосов
/ 30 января 2020

Если вы указываете свой рост в пользовательском интерфейсе, как это plotOutput("plot", height = "600px") он должен отображаться правильно

...