欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!
对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。
作者:李誉辉
四川大学在读研究生
前言
这是shinydashboard与shiny_史上最全第二篇,上一篇:
shinydashboard与shiny_史上最全(一)
第一部分:
1 简介
2 shiny文件的创建和运行
3 shinydashboard
3.1 标题栏(Header)
第二部分:
3.2 输入与输出
3.3 侧边栏
3.4 主体(Body)
3.5 布局(Layouts)
4 shiny框架
第三部分:
5 选项卡(tabset)
6 美化
7 CSS语法
8 与leaflet结合
9 web部署
3.1
输入与输出
shinydashboard()
支持shiny
自带的所有~Input()
对象,
这些对象同样也能放入box中。
所有Input对象:
actionButton()
, 激活按钮。
actionLink()
, 激活链接。
checkboxInpu()
, 勾选框。
checkboxGroupInput()
, 勾选组合框。
dateInput()
, 日期选择框。
dateRangeInput()
, 日期范围选择框。
fileInput()
,上传文件框。
downloadButton()
, 下载数据。
numericInput()
, 数字选择框。
passwordInput()
, 密码输入框。
radioButtons()
, 单选按钮。
selectInput()
, 选择框。
sliderInput()
, 滑动条。
submitButton()
, 提交按钮。
textInput()
, 文本输入框。
输出需要一对组合函数,在UI端使用~Output()
, 在server端使用render~()
,
2者通过变量名进行匹配。shinydashboard
同样支持所有shiny
自带的输出组合。
所有输出组合:
renderPlot()
与 plotOutput()
, 绘图输出。
renderText()
与 textOutput()
, 文本输出。
renderPrint()
与 verbatimTextOutput()
, 打印输出。
renderTable()
与 tableOutput()
, 以HTML表格形式输出。
renderImage()
与 imageOutput()
, 读取图片输出。
renderDataTable()
与 dataTableOutput()
, 交互式表格输出,来自DT
包。
renderUI()
与 uiOutput()
/htmlOutput()
, 当作html语法输出。
3.2.1 滑动条(slider)
UI端代码如下:
1library(shiny)
2library(shinydashboard)
3
4dashboardPage(
5 dashboardHeader(title = "滑动条传入参数"),
6 dashboardSidebar(
7 # 第1个滑动条:传入简单的整数
8 sliderInput("integer", "整数:",
9 min=0, max=1000, value=500), # 最下值为0,最大值为1000,默认为500
10
11 # 第2个滑动条,传入小数
12 sliderInput("decimal", "小数:",
13 min = 0, max = 1, value = 0.5, step= 0.1), # 步长为0.1
14
15 # 第3个滑动条,传入区间范围
16 sliderInput("range", "范围:",
17 min = 1, max = 1000, value = c(200,500)), # 默认范围为200到500
18
19 # 第4个滑动条,传入货币格式,并附带动画按钮
20 sliderInput("format", "货币格式:",
21 min = 0, max = 10000, value = 0, step = 2500, # 步长为2500
22 format="$#,##0", locale="us", animate=TRUE), # 格式为千分位数字,locale美元
23
24 # 第5个滑动条,用于控制动画速度
25 sliderInput("animation", "循环动画",
26 1, 2000, 1, step = 10, # 最小1,最大2000,步长10,单位ms(毫秒)
27 animate=animationOptions(interval=300, loop=T)) # 设定动画选项
28 ),
29 dashboardBody( # box内同样可以插入shiny的输出函数
30 fluidRow(box(tableOutput("values"))) # 以HTML表格形式输出变量values
31 )
32)
server端代码如下:
这里涉及到反应表达式,通常是先计算反应表达式,生成output
对象需要的变量。
后面的output
直接使用变量。调用反应表达式需要加括号。
1library(shiny)
2
3# 自定义服务器脚本
4shinyServer(function(input, output) {
5 # 反应表达式:创建一个数据框,用来存放所有输入值。
6 sliderValues <- reactive({
7 # Compose data frame
8 data.frame(
9 Name = c("整数",
10 "小数",
11 "范围",
12 "货币格式",
13 "动画"),
14 Value = as.character(c(input$integer,
15 input$decimal,
16 paste(input$range, collapse=' '),
17 input$format,
18 input$animation)),
19 stringsAsFactors=FALSE)
20 })
21
22 # 输出组件,新增变量values
23 output$values <- renderTable({ # 以表格的形式输出
24 sliderValues() # 调用反应表达式需要加括号()
25 })
26})
运行结果如下:
3.2.2 选择框(selectInput)及勾选框
与shiny中用法一致,UI端代码如下:
1library(shiny)
2library(shinydashboard)
3
4dashboardPage(
5 dashboardHeader(title = "选择框传入参数"),
6 dashboardSidebar(
7 # 定义选择框
8 selectInput("variable", # 传入变量名称
9 "选择变量:", # 提示文字
10 # 选项内容,左边是显示字符,右边是传入变量名称,若是向量传递则字符与变量相同
11 list("气缸数" = "cyl",
12 "变速箱类型" = "am", # 列表传递,可以修改显示
13 "档位数" = "gear")),
14 # 定义勾选框
15 checkboxInput("outliers", # 传入变量名称
16 "显示离群值", # 勾选框提示文字
17 FALSE) # 默认状态
18 ),
19 dashboardBody(
20 fluidRow(box(plotOutput("mpgPlot"), # 以图片形式输出mpgPlot变量
21 title = h3(textOutput("caption")))) # 以三级标题形式输出caption变量
22 )
23)
server端代码如下:
1library(shiny)
2library(datasets)
3
4# 数据初始化:将不依赖用户输入的数据,先在服务器脚本中计算出来
5mpgData <- mtcars
6## 变速箱变量因子化,增加标签:自动挡和手动挡
7mpgData$am <- factor(mpgData$am, labels = c("Automatic", "Manual"))
8
9# 自定义服务器脚本:反应mpg与其它3个变量之间的关系并绘图
10shinyServer(function(input, output) {
11 # 首先定义反应表达式,后面的output对象都会用到该表达式
12 formulaText <- reactive({
13 paste("mpg ~", input$variable)
14 })
15
16 # 打印caption标题,以文本形式输出
17 output$caption <- renderText({
18 formulaText()
19 })
20 # 根据公式输出图形,仅仅当勾选离群值时,才包含离群值
21 output$mpgPlot <- renderPlot({
22 boxplot(as.formula(formulaText()),
23 data = mpgData,
24 outline = input$outliers)
25 })
26})
</