R Shiny-在侧边栏面板外显示静态文本

时间:2018-09-27 19:53:23

标签: r shiny

我想在Shiny的侧边栏面板之外显示静态文本。我能够在侧边栏面板中显示文本。但是,如果我尝试在侧边栏面板之外显示文本,则会出现以下错误:“ match.arg中的错误:'arg'必须为NULL或字符向量”。

下面是一个示例代码,它在侧边栏面板中显示句子“ This is a static text”。我想在侧边栏面板“正下方”显示文本,但不在面板窗口内部显示。

以下代码为我提供了此输出:

this output,但我希望它看起来像这样:

like this我该如何实现?

library(shiny)

# Define UI for application that draws a histogram
ui <- fluidPage(

   # Application title
   titlePanel("Old Faithful Geyser Data"),

   # Sidebar with a slider input for number of bins 
   sidebarLayout(
      sidebarPanel(
         sliderInput("bins",
                     "Number of bins:",
                     min = 1,
                     max = 50,
                     value = 30),
         h5("This is a static text")
      ),

      # Show a plot of the generated distribution
      mainPanel(
         plotOutput("distPlot")
      )
   )
)

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

   output$distPlot <- renderPlot({
      # generate bins based on input$bins from ui.R
      x    <- faithful[, 2] 
      bins <- seq(min(x), max(x), length.out = input$bins + 1)

      # draw the histogram with the specified number of bins
      hist(x, breaks = bins, col = 'darkgray', border = 'white')
   })

}

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

2 个答案:

答案 0 :(得分:2)

sidebarPanel函数会将所有内容放入form类的well内。一种骇人听闻的解决方案(也许是更好的解决方案)是创建一个自定义函数siderbarPanel,该函数将元素放置在form之外。下面是带有函数sidebarPanel2的代码,该函数只是对原始函数的自定义,用于将元素“恰好在下面”。您可以放任何东西,而不仅仅是文本。

library(shiny)

sidebarPanel2 <- function (..., out = NULL, width = 4) 
{
  div(class = paste0("col-sm-", width), 
    tags$form(class = "well", ...),
    out
  )
}

# Define UI for application that draws a histogram
ui <- fluidPage(
  # Application title
  titlePanel("Old Faithful Geyser Data"),
  # Sidebar with a slider input for number of bins 
  sidebarLayout(
    sidebarPanel2(fluid = FALSE,
      sliderInput("bins",
                 "Number of bins:",
                 min = 1,
                 max = 50,
                 value = 30),
      out = h5("This is a static text")
    ),
    # Show a plot of the generated distribution
    mainPanel(
      plotOutput("distPlot")
    )
  )
)

# Define server logic required to draw a histogram
server <- function(input, output) {
   output$distPlot <- renderPlot({
      # generate bins based on input$bins from ui.R
      x    <- faithful[, 2] 
      bins <- seq(min(x), max(x), length.out = input$bins + 1)
      # draw the histogram with the specified number of bins
      hist(x, breaks = bins, col = 'darkgray', border = 'white')
   })
}

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

答案 1 :(得分:0)

一种选择:您根本不能使用sidebarLayout(),而只能定义自己的shiny-input-container样式(有关调整滑块组件样式的更多示例,请参见this answer)。然后,您可以使用fluidRow()column()嵌套(example)来对输入窗口小部件,文本和图形进行更复杂的排列。

library(shiny)

# Define UI for application that draws a histogram
ui <- fluidPage(

  #CSS Styles
  tags$style(HTML(
    paste0(".shiny-input-container {background-color: #f5f5f5; border: 1px solid #e3e3e3;",
           "padding-left: 10px; padding-right: 10px; border-radius: 3px;}")
           )),

  # Application title
  titlePanel("Old Faithful Geyser Data"),

  #use column to mimic sidebarPanel
  column(
    width = 4,
    sliderInput("bins",
                "Number of bins:",
                min = 1,
                max = 50,
                value = 30),    
    hr(),
    h5("This is a static text")
  ),

  #use column to mimic main panel
  column(
    width = 8,
    plotOutput("distPlot")
  )

)

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

  output$distPlot <- renderPlot({
    # generate bins based on input$bins from ui.R
    x    <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins + 1)

    # draw the histogram with the specified number of bins
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })

}

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

reprex package(v0.2.1)于2018-09-28创建