我想在Shiny的侧边栏面板之外显示静态文本。我能够在侧边栏面板中显示文本。但是,如果我尝试在侧边栏面板之外显示文本,则会出现以下错误:“ match.arg中的错误:'arg'必须为NULL或字符向量”。
下面是一个示例代码,它在侧边栏面板中显示句子“ This is a static text”。我想在侧边栏面板“正下方”显示文本,但不在面板窗口内部显示。
以下代码为我提供了此输出:
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)
答案 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创建