2016年制做 Dashboard 是一种怎样的体验?咱们想要的:css
响应式
+自适应
+移动先行
+敏捷开发
+模块化
+微服务
+单页面应用
,html
相信这些必定已经成为了前端开发的标准配置。那咱们须要使用前端
yarn
+jquery
+react
+nodejs
+webpack
+seajs
+echarts
node
等等前端工具才能完成咱们的数据可视化吗?react
2016年的Dashboard已经不必定须要如此复杂的前端组件了,因为Dashboard已是一个较为成熟的领域,经常使用的组件已经模块化,而Dashboard最为复杂的部分其实在于 响应式钻取
交互分析,而数据处理这件事情其实并非前端工程师最擅长的事情,若是可让最擅长数据处理的人来完成 多图表 响应式 交互式 钻取分析
那么这不失为一种好的解决方案。本文将讨论在R语言中使用 flexdashboard
的dashboard开发方法,用markdown完成dashboard不是梦。jquery
让咱们来看看这样一个 MVC 工做流(Model + Visz + Controller):webpack
1.首先,数据分析师接到产品运营团队的Dashboard需求,数据分析师在服务器上写一些简单的SQL,对数据进行初步分析。git
2.而后,经过初步分析明确了须要的数据范围,向DBA申请某区间数据,完成数据源 Models 的定义。==》Model
3.接着,写了一连串的SQL语句作数据的进一步分析,这里实际上就是定义了一些 DAG(一般在R中能够组合使用sqldf
(小数据集)或者dplyr
(大数据集)来流畅完成)==》Controller
4.最后,数据再通过图层叠加、分组、切面、交互式、自适应等等方式渲染作数据可视化。==》Viszgithub
flexdashboard
是一个基于Rmarkdown的仪表盘,易于编排和发布,且兼容移动端显示。一方面,因为flexdashboard
能够利用htmlwidgets
套件来完成丰富的可视化工做,好比柱状图、折线图、表格等等,因此在图表呈现方面很是惊艳。另外一方面,它还容许运行在shiny
服务器上,支持响应式编程特性,经过可交互的界面操做就能够完成直观的数据钻取工做。web
flexdashboard
真的使得制做Dashboard的成本和效率获得了提高!
组件 | 语法 | 布局 | 元素 |
---|---|---|---|
标题 | # | ======= | Page |
方向 | ## | ------------- | Column (或者 Row 若是在yaml中选择 orientation: row) |
区块 | ### | Box |
配置 | 效果 |
---|---|
{.mobile} | 只在移动端显示 |
{.no-mobile} | 移动端不显示 |
{.no-padding} | 无边距图标 (默认边距8像素) |
{.no-title} | 去除组件名称 |
{.sidebar} | 以左侧边栏显示 |
{.storyboard} | 添加故事板(也能够在yaml中配置 storyboard: true) |
{.tabset} | 以选项卡方式显示子页面 |
{.tabset-fade} | 添加带有渐变效果的选项卡 |
{data-padding=10} | 数据填充边距设置 (默认边距10像素) |
{data-height=650} | 设置组件的相对高度 |
{data-width=350} | 设置组件的相对宽度 |
{data-icon="fa-list"} | 增长字体或者图标做为菜单栏标志 |
{data-orientation=rows} | 设置页面布局方向 |
{data-navmenu="Menu A"} | 菜单栏设定 |
{data-commentary-width=400} | 故事板组件的相对宽度 |
例子:
--- title: "FinanceR" output: flexdashboard::flex_dashboard: orientation: rows vertical_layout: scroll ---
配置项 | 描述 |
---|---|
css | css文件路径 添加CSS皮肤 |
favicon | 图标路径 添加favicon图标 |
logo | 图片路径 导航栏左侧图标 |
navbar | 形如 - {title: "A", href: "URL", align: left} 添加菜单栏 |
orientation | 以 rows 或 columns 为布局方向 |
social | ["facebook", "FinanceR", "github","linkedin", "weibo", 或者 "menu"] 链接到社交网站 |
source_code | 是否显示源码 |
storyboard | (true / false) 是否添加故事版 |
theme | 默认皮肤:default 也能够选择:cosmo,bootstrap,cerulean,journal,flatly,readable,spacelab,united,lumen,paper,sandstone,simplex,yeti |
vertical_layout | 是否使用自适应风格,自动填补或滚动元素大小 |
利用故事版,能够按部就班地讲解某个业务场景的生命周期。
下面是一个storyboard 在移动端和PC端的显示效果:
### 菜单栏名称 {.storyboard} \```{r} library(d3heatmap) d3heatmap(mtcars, scale="column", colors="Blues") \```
首先,静态图例能够经过 htmlwiget
的valueBox等函数快速制图
### Downloads per sec (last 5 min) \```{r} htmlwiget::valueBox( value = rate, icon = "fa-area-chart", color = if (rate >= 3) "warning" else "primary" ) \```
而后,在yaml
中声明 runtime: shiny
就能够开启动态图表模式,固然相应的图表应该在后面追加上 renderValueBox()
函数:
htmlwiget::valueBox( value = rate, icon = "fa-area-chart", color = if (rate >= 3) "warning" else "primary" ) %>% renderValueBox()
这样ValueBox就变成能够实时现实数据的仪表了(经过R驱动)。
flexdashboard
意在快速制做dashboard,它制做dashboard的速度比shinydashboard
还要来得快,然而flexdashboard
框架的设计理念是运用在一些足够快速可是富有约束的场景,在产品变得复杂的状况下,整个源码又能够切换到 shinydashboard
之中来知足工程化的需求。能够说flexdashboard
是在Rmarkdown
、shiny
、htmlwegit
之上结出的果实。
在使用flexdashboard
的过程当中,目前,调整一些局部的细节变得相对困难,这里比较怀念zeppelin
中能够经过直接选择column的宽度来调整排版(基于boostrap),有些地方图表和显示并不必定能知足最终客户的需求,不过我相信在和用户讨论需求的环节中,flexdashboard
确定会成为你趁手的武器。
目前,zeppelin
中尚且不能完美支持DT::datatable、plotly::ggplotly等等方式的做图,也不支持shiny
,相信在将来的不久zeppelin
应该会和flexdashboard
相互融合。
小技巧:
flexdashboard
容许在多个 block 中并行运行多个shiny server
实例,这意味着咱们的代码复用更为方便。