14.3 使用flexdashboard创建数据看板
R语言作为一门以统计计算和数据可视化为核心的工具性语言,拥有两套比较成熟的数据看板构建方案:一是前面介绍的“shiny+shinydashboard”组合;二是接下来重点介绍的“Rmarkdown+flexdashboard”组合。
flexdashboard是Rmarkdown的拓展,旨在使Rmarkdown也可以输出数据看板。相比于shiny,Rmarkdown的语法更简单,使用门槛更低,同时,Rmarkdown布局灵活且具备很好的兼容性,可以满足各种页面样式的输出。不足的是,Rmarkdown基于“YAML+Knitr”一次性生成页面,没有服务器(server)端代码文件的支持,无法实现页面的动态渲染,因此无法创建需要实时刷新数据的分析性数据看板。
flexdashboard组件主要包含以下几种。
·graphics:base、lattice、grid(ggplot2)、htmlwidgets(基于js可视化库封装的api接口)。
·tabular:即表格,典型的有DT、ktable等。
·gauges:单值仪表盘。
·vlaues boxes:指标卡。
·text annotations:文本框。
flexdashboard的核心布局理念是基于行列的矩阵型布局,即整个文档都是操纵行与列的布局,不同页面可以通过侧边栏和tab页切换,其中的可视组件会基于规定的行列长宽大小,按照规则自适应屏幕。
1.创建flexdashboard文件
对于初次使用flexdashboard的用户,建议参考以下代码进行安装:
安装完成之后,打开RStudio,依次选择“file→New File→R Markdown”,会弹出提示创建flexdashboard文件的页面,如图14-12所示。
图14-12 RStudio中创建flexdashboard文件示例
在图14-12所示的界面中,单击“OK”按钮,可以看到当前工作目录下新建了一个扩展名为Rmd的文件,该文件就是flexdashboard文件。因为flexdashboard文件依托Rmarkdown创建,所以该文件的YAML文件头示意如下:
上述代码中,vertical_layout参数用于控制整个页面的行列布局。当设置vertical_layout参数为fill时,效果为自动按列布局,即页面中的所有图表高度会根据浏览器高度自适应调整,输出效果如图14-13所示。由图14-13可知,三幅图表的长宽大小自适应浏览器页面。
图14-13 flexdashboard生成的数据看板自动按列布局示例
当设置vertical_layout参数为scroll时,打开的页面中的图表保持原始大小不变,图表在浏览器中以垂直排列方式显现,如果竖排的所有图表高度之和大于页面浏览器窗口,页面会自动启动垂直滚动功能。
flexdashboard也支持数据看板页面的多列布局,在代码中声明列参数即可自定义各列宽度,代码示例如下:
用户可以在数据看板的每一个图表添加上述参数,以控制图表的长宽大小。页面的多列布局通过设置“Column{data-width=400}”,外加三个以上的短横线组成的分割线实现。分割线在markdown语法中往往用于分段,这里主要用于分割图表模块。参数Column用于声明列,参数Row用于声明行。
用户还可以在Column中声明Tabsets,以实现tab页切换,效果如图14-14所示。
图14-14 flexdashboard设置tab页切换示例
2.调用HTML Widgets组件
HTML Widgets是R语言中很有特色的一类交互式动态可视化组件,这些组件通常是封装的第三方JavaScript可视化库。由于这些可视化库的底层代码都做好了封装,调用也比较简单,因此不需要做太多的参数设置。
使用flexdashboard构建数据看板时常用到的HTML Widgets组件如下。
·Leaflet:第三方交互式地图组件,可用于构建数据地图。
·dygraphs:一款快捷、灵活的开源JavaScript图表库,具有缩放、平移和鼠标悬停等交互功能,可用于交互式图表绘制。
·Plotly:一个基于JavaScript的绘图库,支持的绘图种类丰富、效果美观,可用于交互式图表制作。
·Rbokeh:一个Python可视化库的R语言接口包,可以创建基于web的交互可视化,可以通过浏览器打开页面,以生成交互式图表。
·Highcharter:一个用纯JavaScript编写的图表库,配置简单,支持多种交互式图表,可用于商业级图表的绘制。
·vis Network:一个用JavaScript编写的网络数据可视化R包,适用于网络图表的制作。
·DT:提供了JavaScript库Data Tables的R语言接口,可以创建交互式HTML页面表格,通常用于交互式数据表的呈现。
引用上述组件的方法与使用R包相似,即先安装好对应的R包,然后再加载使用,代码示例如下:
一般而言,使用flexdashboard输出表格有两种方式:一种是使用knitr:kable()函数;另一种是使用DT包。DT包生成的表格具有交互性,表格数据可以被筛选,也可以被搜索,方便用户使用。在flexdashboard中插入表格的方式与dygraphs的方式类似,代码示例如下:
因篇幅限制,有关flexdashboard创建数据看板的更多示例可以通过官网(https://pkgs.rstudio.com/flexdashboard/)进行学习。