使用 shinydashboard
除了 shiny 扩展包提供的函数之外,RStudio 也开发了一个 shinydashboard 扩展包
(http://rstudio.github.io/shinydashboard/),它呈现数据的方式就是专门用于概览或监测数据。
接下来的例子旨在说明创建一个简易仪表板有多简单,这个仪表板可以按每周和每月
的时间刻度显示 CRAN 上下载量最多的最受欢迎的 R 扩展包。
数据源由 cranlogs(http://cranlogs.r-pkg.org) 提供。首先运行以下代码安装所需的扩
展包:
install_ _packages(c("shinydashboard", "cranlogs"))
然后,快速查看一下 CRAN 下载数据的数据源:
library(cranlogs)
cran_ _top_ _downloads()
## No encoding supplied: defaulting to UTF-8.
## rank package count from to
## 1 1 Rcpp 9682 2016-08-18 2016-08-18
## 2 2 digest 8937 2016-08-18 2016-08-18
## 3 3 ggplot2 8269 2016-08-18 2016-08-18
## 4 4 plyr 7816 2016-08-18 2016-08-18
## 5 5 stringi 7471 2016-08-18 2016-08-18
## 6 6 stringr 7242 2016-08-18 2016-08-18
## 7 7 jsonlite 7100 2016-08-18 2016-08-18
## 8 8 magrittr 6824 2016-08-18 2016-08-18
## 9 9 scales 6397 2016-08-18 2016-08-18
## 10 10 curl 6383 2016-08-18 2016-08-18
cran_ _top_ _downloads("last-week")
## No encoding supplied: defaulting to UTF-8.
## rank package count from to
## 1 1 Rcpp 50505 2016-08-12 2016-08-18
## 2 2 digest 46086 2016-08-12 2016-08-18
## 3 3 ggplot2 39808 2016-08-12 2016-08-18
## 4 4 plyr 38593 2016-08-12 2016-08-18
## 5 5 jsonlite 36984 2016-08-12 2016-08-18
## 6 6 stringi 36271 2016-08-12 2016-08-18
## 7 7 stringr 34800 2016-08-12 2016-08-18
## 8 8 curl 33739 2016-08-12 2016-08-18
## 9 9 DBI 33595 2016-08-12 2016-08-18
## 10 10 magrittr 32880 2016-08-12 2016-08-18
熟悉了仪表板中显示的数据格式之后,就可以考虑构建仪表板了,这与构建典型
的 shiny 应用程序完全相同。为了充分利用 shinydashboard 扩展包,最好提前浏览
http://rstudio.github.io/shinydashboard/structure.html,对它提供的优质组件有一个了解。
与创建 shiny 应用程序类似,我们从用户界面开始。这次,使用 dashboardPage、
dashboardSidebar 和 dashboardBody 这 3 个函数。在仪表板中,我们想要显示扩展
包的下载动态,以及每月和每周下载量最多的最受欢迎的扩展包。
我们把月度和周度的菜单放到侧栏中,这样用户可以选择需要查看的数据。在每一个
标签页,把绘图和表格放在一起。在这个例子中,我们用 formattable 为下载列添加颜
色条,使数据更具可比性且更加直观。
library(shiny)
library(shinydashboard)
library(formattable)
library(cranlogs)
ui <- dashboardPage(
dashboardHeader(title = "CRAN Downloads"),
dashboardSidebar(sidebarMenu(
menuItem("Last week",
tabName = "last_week", icon = icon("list")),
menuItem("Last month",
tabName = "last_month", icon = icon("list"))
)),
dashboardBody(tabItems(
tabItem(tabName = "last_week",
fluidRow(tabBox(title = "Total downloads",
tabPanel("Total", formattableOutput("last_week_table"))),
tabBox(title = "Top downloads",
tabPanel("Top", formattableOutput("last_week_top_table"))))),
tabItem(tabName = "last_month",
fluidRow(tabBox(title = "Total downloads",
tabPanel("Total", plotOutput("last_month_barplot"))),
tabBox(title = "Top downloads",
tabPanel("Top", formattableOutput("last_month_top_table")))))
))
)
注意到,plotOutput( ) 是 shiny 包中的函数,而 formattableOutput( ) 函数则
是由 formattable 包提供的。事实上,开发人员可以创建各种类型的 HTML 小工具,只要扩
展包恰当地定义了 render* 函数和 *Output 函数来生成正确的 HTML 代码,我们就可
以把这些小工具嵌入 shiny 应用程序中。
接下来,我们定义服务器逻辑。因为输出结果完全依赖于数据源,在调用函数
formattable( )和 plot( )之前要先下载数据。
server <- function(input, output) {
output$last_week_table <- renderFormattable({
data <- cran_ _downloads(when = "last-week")
formattable(data, list(count = color_ _bar("lightblue")))
})
output$last_week_top_table <- renderFormattable({
data <- cran_ _top_ _downloads("last-week")
formattable(data, list(count = color_ _bar("lightblue"),
package = formatter("span",
style = "font-family: monospace;")))
})
output$last_month_barplot <- renderPlot({
data <- subset(cran_ _downloads(when = "last-month"),
count > 0)
with(data, barplot(count, names.arg = date),
main = "Last month downloads")
})
output$last_month_top_table <- renderFormattable({
data <- cran_ _top_ _downloads("last-month")
formattable(data, list(count = color_ _bar("lightblue"),
package = formatter("span",
style = "font-family: monospace;")))
})
}
事实上,如果数据持续更新,我们就可以创建一个动态的仪表板,其中的表格和图表
会定期更新。使用 reactiveTimer 和 reactive 是实现这项功能的关键。要了解更多信息,请
查阅相关帮助文档。
用户界面和服务器逻辑都准备好之后,就可以运行应用程序了:
runApp(shinyApp(ui, server))
默认情况下,shiny 应用程序会显示第一次访问时的第一页。图 15-19 是 Last week 标
签页面的屏幕截图,其中包括两个 formattable 数据框的选项卡。

图 15-19
图 15-20 则是 Last month 标签页面的屏幕截图,其中包括一个直方图和一个 formattable
数据框。

图 15-20
使用 shinydashboard的更多相关文章
- shinydashboard包---为shiny提供BI框架
1.安装 install.packages("shinydashboard") 2.基础知识 仪表盘有三个部分:标题.侧边栏,身体.下面是最最小的仪表面板页面的UI: ## ui. ...
- Building [Security] Dashboards w/R & Shiny + shinydashboard(转)
Jay & I cover dashboards in Chapter 10 of Data-Driven Security (the book) but have barely mentio ...
- R shinydashboard——3.外观
目录 1.皮肤 2.注销面板 3.CSS 4. 标题延长 5.侧边栏宽度 6.图标 7.状态和颜色 1.皮肤 shinydashboard有很多颜色主题和外观的设置.默认为蓝色,可指定黑丝.紫色.绿色 ...
- R shinydashboard ——2. 结构
目录 1.Shiny和HTML 2.结构 3. 标题Header 4. 侧边栏Siderbar 5.主体/正文Body box tabBox infoBox valueBox Layouts 1.Sh ...
- R shinydashboard ——1. 基本用法
shiny和shinydashboard使用虽然简单,但控件众多,需及时总结归纳. install.packages("shinydashboard") shinydashboar ...
- R语言包翻译——翻译
Shiny-cheatsheet ...
- R语言包翻译
Shiny-cheatsheet 作者:周彦通 1.安装 install.packages("shinydashboard") 2.基础知识 仪表盘有三个部分:标题.侧边栏,身体 ...
- R 包
[下面列出每个步骤最有用的一些R包] .数据导入 以下R包主要用于数据导入和保存数据: feather:一种快速,轻量级的文件格式:在R和python上都可使用 readr:实现表格数据的快速导入 r ...
- R语言中常用包(二)
数据导入 以下R包主要用于数据导入和保存数据 feather:一种快速,轻量级的文件格式.在R和python上都可使用readr:实现表格数据的快速导入.中文介绍可参考这里readxl:读取Micro ...
随机推荐
- Python - 3.6 学习四
错误.调试和测试 程序运行中,可能会遇到BUG.用户输入异常数据以及其它环境的异常,这些都需要程序猿进行处理.Python提供了一套内置的异常处理机制,供程序猿使用,同时PDB提供了调试代码的功能,除 ...
- 网络费用流-最小k路径覆盖
多校联赛第一场(hdu4862) Jump Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- 170608、Spring 事物机制总结
spring两种事物处理机制,一是声明式事物,二是编程式事物 声明式事物 1)Spring的声明式事务管理在底层是建立在AOP的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加 ...
- java网络编程面试题
1.网络编程时的同步.异步.阻塞.非阻塞? 同步:函数调用在没得到结果之前,没有调用结果,不返回任何结果.异步:函数调用在没得到结果之前,没有调用结果,返回状态信息.阻塞:函数调用在没得到结果之前,当 ...
- ios开发 内测包添加测试UDID
内侧包添加 UDID: 1.蒲公英获取设备UDID https://www.pgyer.com/udid 2. 登录开发者中心 --> Certificates, Identifiers ...
- 使用wireshark分析TLS
1.基本概念 SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密 ...
- B. Factory Repairs---cf627B(线段树)
题目链接:http://codeforces.com/problemset/problem/627/B 题意:有一个工厂生产零件,但是机器是不正常的,需要维修,维修时间是 k 天,在维修期间不能生产, ...
- UVA 624 ---CD 01背包路径输出
DescriptionCD You have a long drive by car ahead. You have a tape recorder, but unfortunately your b ...
- Python总结篇——知识大全
python基础 Python开发环境搭建 Python变量和基本数据类型 python基本数据类型之操作 python的语法规范及for和while python编码 python文件操作 pyth ...
- DrawLayout使用侧滑抽屉
布局:fg_left_drawer <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...