【d3.js入门】d3.js比例尺

563 阅读4分钟

d3.js比例尺是将数据映射到图形尺寸的重要工具。在可视化过程中,比例尺可以将数据转换为像素尺寸,使我们可以更容易地看出不同的数据之间的差异。在d3.js中,有多种类型的比例尺可供选择,包括线性比例尺、对数比例尺、时间比例尺等等。

下面是一些d3.js比例尺的示例:

1. 线性比例尺

线性比例尺将输入域的值映射到输出域的连续范围。例如,如果你有一个值域从0到100的数据集,你可以使用线性比例尺将它映射到0到500像素的输出范围,如下所示:

const data = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
const xScale = d3.scaleLinear()
  .domain([0, 100])
  .range([0, 500]);
console.log(xScale(50)); // 输出250

2. 对数比例尺

对数比例尺将输入域的值映射到输出域的对数范围。这在处理一些非线性数据时很有用,例如对数数据或者具有指数增长趋势的数据。例如,你可以使用对数比例尺将指数数据集映射到像素范围内,如下所示:

const data = [1, 10, 100, 1000, 10000];
const xScale = d3.scaleLog()
  .domain([1, 10000])
  .range([0, 500]);
console.log(xScale(100)); // 输出144.83

3. 时间比例尺

时间比例尺将输入域的日期值映射到输出域的连续范围。它非常适用于处理时间序列数据。例如,你可以使用时间比例尺将一段时间范围映射到像素范围内,如下所示:

const data = [new Date('2022-01-01'), new Date('2022-02-01'), new Date('2022-03-01'), new Date('2022-04-01'), new Date('2022-05-01')];
const xScale = d3.scaleTime()
  .domain([new Date('2022-01-01'), new Date('2022-05-01')])
  .range([0, 500]);
console.log(xScale(new Date('2022-03-01'))); // 输出208.33

4. 序数比例尺

序数比例尺用于将输入域中的离散值映射到输出域中的连续范围。这种比例尺非常适用于分类数据。例如,你可以使用序数比例尺将离散的类别数据映射到像素范围内,如下所示:

const data = ['A', 'B', 'C', 'D', 'E'];
const xScale = d3.scaleOrdinal()
  .domain(data)
  .range([0, 100, 200, 300, 400]);
console.log(xScale('B')); // 输出100

5. 阈值比例尺

阈值比例尺用于将连续域中的值映射到离散的输出域中。这种比例尺通常用于离散颜色的映射。例如,你可以使用阈值比例尺将数值数据映射到不同的颜色,如下所示:

const data = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
const colorScale = d3.scaleThreshold()
  .domain([30, 60, 90])
  .range(['green', 'yellow', 'red']);
console.log(colorScale(50)); // 输出yellow

在上述示例中,当输入值为50时,输出为'yellow',因为50在30和60之间。如果输入值为80,则输出为'red',因为80大于等于阈值90。

6. 时间比例尺

时间比例尺将时间数据映射到输出域中的连续范围。这种比例尺非常适用于处理时间序列数据。例如,你可以使用时间比例尺将时间数据映射到屏幕上的可视化范围,如下所示:

const data = [new Date('2023-01-01'), new Date('2023-01-15'), new Date('2023-02-01')];
const xScale = d3.scaleTime()
  .domain([new Date('2023-01-01'), new Date('2023-02-01')])
  .range([0, 500]);
console.log(xScale(new Date('2023-01-15'))); // 输出170.213

在上述示例中,时间比例尺将输入值为'2023-01-15'的时间数据映射到输出范围中的170.213。

7. 自定义比例尺

除了上述常见的比例尺类型,d3.js还支持自定义比例尺。你可以根据自己的需求来创建一个自定义的比例尺。例如,你可以创建一个将字母映射到数字的比例尺,如下所示:

const data = ['A', 'B', 'C', 'D', 'E'];
const customScale = d3.scaleOrdinal()
  .domain(data)
  .range([1, 2, 3, 4, 5]);
console.log(customScale('B')); // 输出2

在上述示例中,自定义比例尺将输入值'A'映射到输出值1,将输入值'B'映射到输出值2,以此类推。

自定义比例尺的创建过程比较灵活,你可以使用d3.scaleQuantize()方法来创建一个分段比例尺,使用d3.scaleLinear()方法来创建一个线性比例尺,使用d3.scalePow()方法来创建一个指数比例尺,等等。你可以在d3.js的官方文档中了解更多有关比例尺的信息。

总之,d3.js比例尺是一种强大的工具,用于将数据映射到图形尺寸。根据不同的数据类型和可视化需求,你可以选择不同类型的比例尺来转换数据。同时,d3.js还提供了许多其他类型的比例尺,如指数比例尺、方根比例尺等,你可以根据需要选择合适的比例尺来转换数据。