首页 > 解决方案 > R Shiny - 在侧边栏面板外显示静态文本

问题描述

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

下面是一个示例代码,它在侧边栏面板内显示句子“这是一个静态文本”。我想在侧边栏面板“正下方”显示文本,但不在面板窗口内。

下面的代码给了我这个输出:

这个输出但我希望它看起来像这样:

像这样我如何实现这一目标?

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)

标签: rshiny

解决方案


sidebarPanel函数会将所有内容放入formwith classwell中。一个 hacky 解决方案(也许有更好的解决方案)是创建一个自定义函数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)

推荐阅读