闪亮 - 高度固定的可滚动面板

时间:2017-05-24 16:40:39

标签: css r shiny

我正在按照一个闪亮的例子来绘制uiOutput中的多个图。我想有一个包含这些图的面板(右图?)具有固定的高度,但允许滚动查看超出此高度的图。

我尝试在固定高度的fixedRow中包含uiOutput(),但它不起作用。

我已经包含了以下代码



require(shiny)

ui <- shinyUI(fluidPage(
    #fixedRow(uiOutput('plots'), height="100px")
    uiOutput('plots')
))

server <- shinyServer(function(input, output) {
    
    plots <- lapply(1:10, function(i){
        plot(runif(50),main=sprintf('Plot nr #%d',i)) 
        p <- recordPlot()
        plot.new()
        p
    })
    n.col <- 3
    
    output$plots <- renderUI({
        col.width <- round(12/n.col) # Calculate bootstrap column width
        n.row <- ceiling(length(plots)/n.col) # calculate number of rows
        cnter <<- 0 # Counter variable
        
        # Create row with columns
        rows  <- lapply(1:n.row,function(row.num){
            cols  <- lapply(1:n.col, function(i) {
                cnter    <<- cnter + 1
                plotname <- paste("plot", cnter, sep="")
                column(col.width, plotOutput(plotname, height = 280, width = 250))
            }) 
            fluidRow( do.call(tagList, cols) )
        })
        
        do.call(tagList, rows)
    })
    
    for (i in 1:length(plots)) {
        local({
            n <- i # Make local variable
            plotname <- paste("plot", n , sep="")
            output[[plotname]] <- renderPlot({
                plots[[n]]
            })
        })
    }
})

shinyApp(ui=ui,server=server)
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:4)

一种选择是使用CSS。可能需要一些摆弄才能按照您想要的方式定位所有内容。这是一个简单的例子:

require(shiny)

ui <- shinyUI(fluidPage(
  #fixedRow(uiOutput('plots'), height="100px")
  tags$style(HTML("
                  #plots {
                    height:100px;
                    overflow-y:scroll
                  }
                  ")),
  uiOutput('plots')
))

server <- shinyServer(function(input, output) {

  plots <- lapply(1:10, function(i){
    plot(runif(50),main=sprintf('Plot nr #%d',i)) 
    p <- recordPlot()
    plot.new()
    p
  })
  n.col <- 3

  output$plots <- renderUI({
    col.width <- round(12/n.col) # Calculate bootstrap column width
    n.row <- ceiling(length(plots)/n.col) # calculate number of rows
    cnter <<- 0 # Counter variable

    # Create row with columns
    rows  <- lapply(1:n.row,function(row.num){
      cols  <- lapply(1:n.col, function(i) {
        cnter    <<- cnter + 1
        plotname <- paste("plot", cnter, sep="")
        column(col.width, plotOutput(plotname, height = 280, width = 250))
      }) 
      fluidRow( do.call(tagList, cols) )
    })

    do.call(tagList, rows)
  })

  for (i in 1:length(plots)) {
    local({
      n <- i # Make local variable
      plotname <- paste("plot", n , sep="")
      output[[plotname]] <- renderPlot({
        plots[[n]]
      })
    })
  }
})

shinyApp(ui=ui,server=server)