使用Observable JS的仪表盘
介绍
Quarto 原生支持 Observable JS,这是由 Mike Bostock(也是 D3 的作者)创建的一系列对原生 JavaScript 的增强功能。Observable JS 以其 响应式运行时 著称,特别适合交互式数据探索和分析。
Observable JS 的创建者(Observable, Inc.)在 https://observablehq.com/ 上运行一个托管服务,您可以在其中创建和发布笔记本。此外,您可以通过其 核心库 在独立文档和网站中使用 Observable JS(“OJS”)。Quarto 使用这些库以及一个在渲染时运行的 编译器,以实现 OJS 在 Quarto 文档中的使用。
逐步讲解
Quarto 仪表盘是展示交互式 OJS 可视化的绝佳方式。下面我们将提供一个完整的示例,让您对基础知识有一个高层次的了解。如果您想了解更多,请参阅 使用 OJS 与 Quarto 的完整文档。
此示例涵盖了许多在使用 OJS 创建仪表盘时会用到的技术,包括响应式计算和更高级的布局结构,如侧边栏和选项卡集。以下是我们将构建的交互式文档:
此仪表盘的源代码如下。请注意,我们在第一个单元格中添加了
//| output: false
选项:这是为了指定该单元格仅包含中间计算(因此不应在仪表盘布局中转换为卡片)。
点击最右侧的数字以获取更多语法和机制的解释。
---
"Palmer Penguins"
title: "Cobblepot Analytics"
author: format: dashboard
---
```{ojs}//| output: false
= FileAttachment("penguins.csv")
data
.csv({ typed: true })
= data.filter(function(penguin) {
filtered return bill_length_min < penguin.bill_length_mm &&
;
islands.includes(penguin.island)
})
```
# {.sidebar}
![](images/penguins.png){width="80%"}
```{ojs}= Inputs.range(
viewof bill_length_min 32, 50],
[35, step: 1, label: "Bill length (min):"}
{value:
)= Inputs.checkbox(
viewof islands "Torgersen", "Biscoe", "Dream"],
["Torgersen", "Biscoe", "Dream"],
{ value: ["Islands:"
label:
}
)
```
# Plot
```{ojs}
Plot.rectY(filtered,
Plot.binX("count"},
{y: "body_mass_g", fill: "species", thresholds: 20}
{x:
))
.plot({
facet: {
data: filtered,"sex",
x: "species",
y: 80
marginRight:
},
marks: [
Plot.frame(),
]
}
)
```
# Data
```{ojs}
Inputs.table(filtered) ```
- 1
-
我们设置
output: false
以表明此单元格仅包含中间计算,不应打印其内容。 - 2
- 当页面加载时,我们从 CSV 读取原始企鹅数据集。
- 3
-
filtered
是一个值,当使用viewof
声明的变量发生变化时(在此情况下为bill_length_min
和islands
),它会自动重新计算。 - 4
-
通过在1级标题中添加
.sidebar
类来创建全局侧边栏。侧边栏可以包含代码单元格、图像、叙述和链接。 - 5
-
在这里,我们使用
viewof
定义输入,以便当它们发生变化时,filtered
数据集会自动重新计算。 - 6
-
1级标题(此处为
# Plots
和# Data
)在仪表盘内创建页面。 - 7
-
当
filtered
数据集发生变化时,图表会自动重新绘制。 - 8
-
表格数据显示会自动刷新,当
filtered
数据集发生变化时。
学习更多
要了解更多关于使用 OJS 与 Quarto 的信息,请参阅以下文章:
Input 描述了布局输入的各种方式(侧边栏、输入面板、直接将输入附加到卡片等)。
使用 OJS 提供了介绍和其他主题的概述。
OJS 库 涵盖了使用标准库和外部 JavaScript 库。
OJS 数据源 概述了读取和预处理数据的各种方式。 OJS Cells 深入探讨了单元格执行、输出和布局。
OJS 代码复用 探讨了在多个文档中复用 OJS 代码的方法。