htmlwidgets 能用来做哪些交互式可视化?
更新时间
htmlwidgets 是 R 的一个框架,用来把 JavaScript 可视化库接入 R。它的核心用法是:用一两行 R 代码生成交互式网页可视化,效果类似 R 的 plot,但输出是可交互的网页组件。这些组件可以在 R 控制台直接使用,也可以嵌入 R Markdown 文档和 Shiny 应用。如果你需要在 R 里做交互式图表、地图或网络图,又不想直接写 JavaScript,htmlwidgets 是主要入口。
它解决什么问题
R 自带的绘图系统输出静态图片。htmlwidgets 把 JavaScript 可视化库封装成 R 函数,让 R 用户用熟悉的语法调用它们,产物是 HTML 组件,能在浏览器里缩放、悬停、筛选。
官方描述的原话是:HTML widgets 的工作方式就像 R 的 plot,只不过它们产生的是交互式网页可视化。一行或两行 R 代码就足以生成一个 D3 图形或 Leaflet 地图。
现成组件覆盖哪些可视化类型
官网 showcase 列出了以下组件,按用途分类:
| 组件 | 用途 |
|---|---|
| Leaflet | 地理空间映射 |
| dygraphs | 时间序列图表 |
| Plotly | 基于 D3 的交互式图形 |
| rbokeh | Bokeh 的 R 接口 |
| Highcharter | Highcharts 的 R 接口 |
| visNetwork | 用 vis.js 做图数据可视化 |
| networkD3 | 用 D3 做图数据可视化 |
| DataTables | 表格数据展示 |
| threejs | 3D 散点图和地球仪 |
| rglwidget | 渲染 rgl 创建的场景 |
| DiagrammeR | 图表和流程图 |
| MetricsGraphics | 用 D3 做散点图和折线图 |
官网提到 gallery 中有 50 多个可用组件,showcase 只展示了其中一部分。所以选型时先去 gallery 搜,很可能已有现成封装。
三种使用场景
官网把使用场景分成三类:
- R 控制台:像调用 plot 一样直接生成组件。
- R Markdown 文档:把组件嵌入报告,输出 HTML 时保留交互性。
- Shiny 应用:作为应用中的交互元素。
这三种场景共用同一套组件,不需要为不同输出重写代码。
组合与联动
单个组件之外,htmlwidgets 生态提供了两个组合工具:
- flexdashboard:把多个 htmlwidgets 组合成仪表盘,支持按行和列灵活指定布局。
- crosstalk:把多个组件连接起来,目前支持组件间的联动刷选(linked brushing)和客户端筛选。
如果需要更复杂的交互,官网建议使用 Shiny。
自己封装新组件
如果 gallery 里没有你需要的 JavaScript 库,可以用 htmlwidgets 框架为它写一个 R binding,封装后同样能在 R 控制台、R Markdown 和 Shiny 中使用。官网的 Develop 部分提供了创建 widget 的指引,另有 widget 尺寸设置和高级主题文档。
从哪里开始
- 看效果:访问 showcase,浏览上面列出的组件示例。
- 找组件:访问 gallery,检索 50 多个可用组件。
- 学开发:访问 Develop 部分,了解如何为 JavaScript 库写 R 封装。
- 源码与问题:项目托管在 GitHub。