5.4 页面布局
5.4.1 页面函数
fluidPage()
用于创建流畅的页面布局。页面由行与列组成。行的存在是为了控制元素出现在同一行上,列的存在是为了定义元素在12单位宽的页面中占据多少宽度。
fluidRow()
函数控制每一行的内容
fixedPage()
固定页面在典型显示器上的宽度限制为940像素,在较小和较大的显示器上分别为724像素或1170像素。
fixedRow()
函数控制每一行的内容
fillPage()
尽可能地创建出填满浏览器窗口的页面
5.4.2 布局函数
布局函数就是控制一个页面中各个元素的布局
5.4.2.1 单页布局
下面就简单介绍经典布局——侧边栏布局sidebarLayout
,常与标题栏titlePanel()
搭配
library(shiny)
ui <- fluidPage(
titlePanel("Central limit theorem"),
sidebarLayout(
sidebarPanel(
numericInput("m", "Number of samples:", 2, min = 1, max = 100)
),
mainPanel(
plotOutput("hist")
)
)
)
server <- function(input, output, session) {
output$hist <- renderPlot({
means <- replicate(1e4, mean(runif(input$m)))
hist(means, breaks = 20)
}, res = 96)
}
shinyApp(ui,server)
其基本布局为“标题栏+侧边栏+主面板”。
5.4.2.2 多页布局
标签卡式布局
tabsetPanel()
创建标签卡这个整体,tabPanel()
创建子标签卡的内容
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textOutput("panel")
),
mainPanel(
tabsetPanel(
id = "tabset",
tabPanel("panel 1", "one"),
tabPanel("panel 2", "two"),
tabPanel("panel 3", "three")
)
)
)
)
server <- function(input, output, session) {
output$panel <- renderText({
paste("Current panel: ", input$tabset)
})
}
tabsetPanel()
的参数id
用于返回当前选中的子标签卡的名称
导航栏式布局
第一个布局函数是
navlistPanel
,可以说是tabsetPanel()
的侧边形式
ui <- fluidPage(
navlistPanel(
id = "tabset",
"Heading 1",
tabPanel("panel 1", "Panel one contents"),
"Heading 2",
tabPanel("panel 2", "Panel two contents"),
tabPanel("panel 3", "Panel three contents")
)
)
注意
Heaning 1
与Heading 2
类似侧边栏中的小标题
第二个布局函数是navbarPage()
与navbarMenu()
。前者控制导航栏置于顶部,后者生成一个下拉式菜单,里面包含了多个子标签卡
5.4.3 bslib风格布局
除此之外,官网Shiny Layouts中还展示了基于bslib
包的布局函数,个人认为更加美观与便捷。
使用时记得导入
library(bslib)
Navbars
导航栏式布局,导航栏被置于顶部或底部
Sidebars
经典侧边栏布局
Tabs
标签卡式布局
Panels & Cards
Panels不知道算什么风格,Cards就是在页面上呈现卡片式窗口
Arrange Elements
自定义布局