首先默认大家已经会常规的shiny语法了,如果还不清楚基础的shiny语法,可以学习shiny官方tutorial:shiny tutorial
学完这个,再学shinydashboard(shinydashboard是更复杂点的UI设计方案)
基础
以下内容来源于shiny官网的shinydashboard教程
shinydashboard
想要使用shinydashboard,首先需要安装包 shinydashboard
install.packages("shinydashboard")
一个dashboard包括三个部分:a header,a siderbar,a body
一个最简单的dashboard的UI如下(run App之后,可以看到这个最简单的界面):
## app.R ##
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody()
)
server <- function(input, output) { }
shinyApp(ui, server)
但是这个空白的界面,没有太多用处
所以,接下来,我们在这里面添加一个直方图,以及一个滑动条插件
## app.R ##
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Basic dashboard"),
dashboardSidebar(),
dashboardBody(
# Boxes need to be put in a row (or column)
fluidRow(
box(plotOutput("plot1", height = 250)),
box(
title = "Controls",
sliderInput("slider", "Number of observations:", 1, 100, 50)
)
)
)
)
server <- function(input, output) {
set.seed(122)
histdata <- rnorm(500)
output$plot1 <- renderPlot({
data <- histdata[seq_len(input$slider)]
hist(data)
})
}
shinyApp(ui, server)
运行上列代码,如下图所示,可以得到这样的结果:
给侧边导航栏添加菜单tab
我们现在可以给侧边导航栏添加菜单项了,类似于shiny中的 tabPanel
,当我们点击侧边导航栏中的一个菜单子项时,整体网页界面会跳转到该菜单所对应的界面。
构建菜单子项总的来说需要两步:
首先:在dashboard的sidebar中添加menuItem
,并且对tabName
进行合理的命名
## Sidebar content
dashboardSidebar(
sidebarMenu(
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
menuItem("Widgets", tabName = "widgets", icon = icon("th"))
)
)
然后,在dashboard的body中添加tabItem
,需要注意的是,tabItem
的value要和侧边栏中菜单项menuItem
的tabName
保持一致
## Body content
dashboardBody(
tabItems(
# First tab content
tabItem(tabName = "dashboard",
fluidRow(
box(plotOutput("plot1", height = 250)),
box(
title = "Controls",
sliderInput("slider", "Number of observations:", 1, 100, 50)
)
)
),
# Second tab content
tabItem(tabName = "widgets",
h2("Widgets tab content")
)
)
)
此时,点击不同的菜单项,就会出现不同的页面
点击widgets,如下所示: