R Shiny:修复流体页面列,例如使其免于滚动

时间:2018-02-19 21:55:58

标签: r shiny

我目前的闪亮应用效果很好,但我正在使用流畅的页面环境:

    ui.R
    ----
    shinyUI(fluidPage(

     fluidRow(
              column(3,
                     ...long list of inserts...
                    ),

              column(3,
                     ... list of a few insterts...
                    ),

              column(6,
                     ... plot ...
                    )
      ))

现在,因为在第一列中有如此长的插入列表,我想将绘图输出固定到位,因此它会随着屏幕向下滚动。 有任何想法吗?流动页面是错误的环境吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Bootstrap' data-spy指令和affix类:

library("shiny")
library("ggplot2")

server <- function(input, output, session) {
  output$plot <- renderPlot({
    ggplot(iris, aes(Sepal.Width, Sepal.Length)) + geom_point()
  })
}

long_list <- do.call(tagList, lapply(seq(50), function(ix) {
  id <- paste0("x", ix)
  numericInput(id, id, 1L)
}))

short_list <- do.call(tagList, lapply(seq(10), function(ix) {
  id <- paste0("y", ix)
  numericInput(id, id, 1L)
}))

ui <- fluidPage(
  tags$head(
    tags$style(HTML("

     .affix {
        top:50px;
        position:fixed;
      }

    "))
  )

  , fluidRow(
    column(3, long_list),
    column(3, short_list),
    column(6, div(`data-spy`="affix", `data-offset-top`="5", plotOutput("plot")))
  )
)

shinyApp(ui = ui, server = server)

enter image description here

答案 1 :(得分:1)

我是Shiny / R的新手,但我认为你也可以使用fixedPanel :) https://shiny.rstudio.com/reference/shiny/latest/absolutePanel.html

以下是also works for me使用fixedPanel的mlegge代码的编辑版本:)

library("shiny")
library("ggplot2")

server <- function(input, output, session) {
    output$plot <- renderPlot({
        ggplot(iris, aes(Sepal.Width, Sepal.Length)) + geom_point()
    })
}

long_list <- do.call(tagList, lapply(seq(50), function(ix) {
    id <- paste0("x", ix)
    numericInput(id, id, 1L)
}))

short_list <- do.call(tagList, lapply(seq(10), function(ix) {
    id <- paste0("y", ix)
    numericInput(id, id, 1L)
}))

ui <- fluidPage(
    fluidRow(
        column(3, long_list),
        column(3, short_list),
        column(6, fixedPanel(top = 10, right = 10, width = "45%", plotOutput("plot")))
    )
)

shinyApp(ui = ui, server = server)