介绍
vega-scale 是一个 JavaScript 库,用于在 Vega 和其他基于 D3 的可视化工具中创建比例尺。它具有可扩展性,支持各种比例尺类型和自定义转换器,并基于 d3-scale 构建。
在这篇文章中,我们将深入介绍如何使用 vega-scale 来创建各种类型的比例尺以及如何自定义比例尺。
安装
在使用 vega-scale 之前,需要使用 npm 进行安装。跳转到你的项目目录下,运行以下命令:
npm install vega-scale
比例尺类型
vega-scale 支持以下比例尺类型:
- 线性比例尺(Linear scales)
- 指数比例尺(Exponential scales)
- 对数比例尺(Logarithmic scales)
- 幂比例尺(Power scales)
- 序数比例尺(Ordinal scales)
- 分类比例尺(Categorical scales)
- 时间比例尺(Temporal scales)
我们将一个一个介绍如何创建这些比例尺类型。
线性比例尺
线性比例尺是一种将连续的输入域映射到连续的输出范围的比例尺。以下示例展示如何创建一个线性比例尺:
import { scaleLinear } from 'vega-scale'; const x = scaleLinear() .domain([0, 1]) .range([0, 100]); x(0.5); // 50
在这个例子中,我们创建了一个线性比例尺 x
,其输入域 domain
是 [0, 1]
,输出范围 range
是 [0, 100]
,并将 0.5
作为输入值传递给比例尺,得到了 50
作为输出值。
指数比例尺
指数比例尺是一种在输入域和输出范围之间进行指数变换的比例尺。以下示例展示如何创建一个指数比例尺:
import { scalePow } from 'vega-scale'; const x = scalePow() .exponent(2) .domain([0, 1]) .range([0, 100]); x(0.5); // 25
在这个例子中,我们创建了一个指数比例尺 x
,其指数 exponent
是 2
,输入域 domain
是 [0, 1]
,输出范围 range
是 [0, 100]
,并将 0.5
作为输入值传递给比例尺,得到了 25
作为输出值。
对数比例尺
对数比例尺是一种在输入域和输出范围之间进行对数变换的比例尺。以下示例展示如何创建一个对数比例尺:
import { scaleLog } from 'vega-scale'; const x = scaleLog() .domain([1, 100]) .range([0, 100]); x(10); // 23.02585092994046
在这个例子中,我们创建了一个对数比例尺 x
,其输入域 domain
是 [1, 100]
,输出范围 range
是 [0, 100]
,并将 10
作为输入值传递给比例尺,得到了 23.02585092994046
作为输出值。
幂比例尺
幂比例尺是一种在输入域和输出范围之间进行幂变换的比例尺。以下示例展示如何创建一个幂比例尺:
import { scalePow } from 'vega-scale'; const x = scalePow() .exponent(0.5) .domain([1, 100]) .range([0, 100]); x(10); // 31.622776601683793
在这个例子中,我们创建了一个幂比例尺 x
,其幂 exponent
是 0.5
,输入域 domain
是 [1, 100]
,输出范围 range
是 [0, 100]
,并将 10
作为输入值传递给比例尺,得到了 31.622776601683793
作为输出值。
序数比例尺
序数比例尺是一种将离散的输入值映射到离散的输出值的比例尺。以下示例展示如何创建一个序数比例尺:
import { scaleOrdinal } from 'vega-scale'; const x = scaleOrdinal() .domain(['red', 'green', 'blue']) .range([0, 50, 100]); x('green'); // 50
在这个例子中,我们创建了一个序数比例尺 x
,其输入域 domain
是 ['red', 'green', 'blue']
,输出范围 range
是 [0, 50, 100]
,并将 'green'
作为输入值传递给比例尺,得到了 50
作为输出值。
分类比例尺
分类比例尺是一种将离散的输入值映射到连续的输出范围的比例尺。以下示例展示如何创建一个分类比例尺:
import { scaleBand } from 'vega-scale'; const x = scaleBand() .domain(['red', 'green', 'blue']) .range([0, 100]) .padding(0.1); x('green'); // 34.99999999999999
在这个例子中,我们创建了一个分类比例尺 x
,其输入域 domain
是 ['red', 'green', 'blue']
,输出范围 range
是 [0, 100]
,并设置了内部填充 padding
是 0.1
,后面会详细介绍这个参数,将 'green'
作为输入值传递给比例尺,得到了 34.99999999999999
作为输出值。
时间比例尺
时间比例尺是一种将时间域映射到连续的输出范围的比例尺。以下示例展示如何创建一个时间比例尺:
import { scaleTime } from 'vega-scale'; const x = scaleTime() .domain([new Date('2021-01-01'), new Date('2021-12-31')]) .range([0, 100]); x(new Date('2021-06-01')); // 49.18032786885246
在这个例子中,我们创建了一个时间比例尺 x
,其输入域 domain
是 new Date('2021-01-01')
和 new Date('2021-12-31')
,输出范围 range
是 [0, 100]
,并将 new Date('2021-06-01')
作为输入值传递给比例尺,得到了 49.18032786885246
作为输出值。
自定义比例尺
除了提供基本比例尺类型外,vega-scale 还支持自定义比例尺类型。以下示例展示如何创建一个自定义比例尺,其中输入域是颜色名称,输出范围是颜色值:
-- -------------------- ---- ------- ------ - ----------- - ---- ------------- ----- ------ - - ---- ---------- ------ ---------- ----- --------- -- ----- - - ------------- ---------------------------- ----------------------------- -------------------- ----------- -- -------
在这个例子中,我们使用了 createScale
方法创建了一个自定义比例尺 x
,其输入域是颜色名称的数组 Object.keys(colors)
,输出范围是颜色值的数组 Object.values(colors)
,并将未知的输入值转换为白色 '#ffffff'
,将 'green'
作为输入值传递给比例尺,得到了 '#00ff00'
作为输出值。
比例尺方法
在创建比例尺后,可以使用以下方法来访问和修改比例尺的属性:
domain([values])
:获取、设置比例尺的输入域。如果不传入参数,则返回当前的输入域。range([values])
:获取、设置比例尺的输出范围。如果不传入参数,则返回当前的输出范围。invert(value)
:获取比例尺输入域中与给定输出值相对应的输入值。ticks([count])
:获取比例尺的近似刻度数。默认情况下,返回 10 个刻度数,可以通过count
参数控制。此方法只对线性比例尺和时间比例尺有效。tickFormat([count, specifier])
:获取比例尺的刻度格式。此方法只对线性比例尺和时间比例尺有效。nice([count])
:将比例尺的输入域调整为更易于阅读的值。此方法只对线性比例尺和时间比例尺有效。copy()
:创建比例尺的副本。可以修改副本而不影响原始比例尺。
比例尺参数
除了比例尺方法外,vega-scale 还提供了以下可选参数,以影响比例尺的行为:
unknown(value)
:设置当输入值未知时使用的默认输出值。默认为undefined
。clamp(value)
:设置是否将输入值限制在输入域的范围内。如果为true
,则将输入值强制限制在该范围内。默认为false
。padding(innerPadding)
:设置分类比例尺的内部填充。内部填充是一个在每个分类之间添加的间距。值介于0
和1
之间。默认为0
。paddingOuter(outerPadding)
:设置分类比例尺的外部填充。外部填充是一个在整个域范围之外添加的额外宽度。值介于0
和1
之间。默认为0
。align(align)
:设置分类比例尺的条带对齐方式。值可以是0
(默认)表示左对齐,0.5
表示居中对齐或1
表示右对齐。
结论
在这篇文章中,我们详细介绍了如何使用 vega-scale 来创建不同类型的比例尺,并了解了如何使用比例尺方法和参数来访问和修改比例尺的属性。此外,我们还展示了如何使用自定义转换器来创建自定义比例尺。现在您可以通过使用 vega-scale 来创建各种比例尺,并在您的数据可视化中使用它们。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedaf56b5cbfe1ea0610fe5