Ordinal Scales 序列比例尺
与 continuous scales 不同,序数比例尺的输出域和输入域都是离散的。例如序数比例尺可以将一组命名类别映射到一组颜色。或者确定一组条形图在水平方向的位置等等。
var fn = d3.scaleOrdinal()
.domain([0,1,2,3,4,5,6])
.range(['a', 'b', 'c', 'd', 'e', 'f', 'g']);
console.log(fn(0)); // a
console.log(fn(2)); // c
console.log(fn(7)); // a
console.log(fn(8)); // b
console.log(fn('ac')) // c
// 设定如果传入非数值型值,返回什么值
var __fn = fn.unknown(undefined);
console.log(__fn('z')); // undefined // 如果是非数值的值, 超出边界
console.log(__fn(8)); // b // 超出边界
颜色方案
d3-scale-chromatic
这个模块提供了用来表示序列、发散以及分类的颜色方案,它的设计是用来和 d3-scale 的 d3.scaleOrdinal 和 d3.scaleSequential 结合使用。大多数的颜色方案都来自于 Cynthia A. Brewer
的 ColorBrewer。由于 ColorBrewer
只发布了离散的配色方案, 顺序和发散的颜色是通过 uniform B-splines 插值得到的。
// 例如,要使用 Accent 颜色方案创建分类颜色比例尺:
var accent = d3.scaleOrdinal(d3.schemeAccent);
// 使用 Blues 颜色方案创建 9 色刻度尺:
var blues = d3.scaleOrdinal(d3.schemeBlues[9]);
// 使用 PiYG 颜色方案撞见发散的、连续的颜色比例尺:
var piyg = d3.scaleSequential(d3.interpolatePiYG);
d3.schemeCategory10 // 返回一个array[10]的数组
Quantize Scales 量化比例尺
量化比例尺与 linear scales 类似,但是其输出区间是离散的而不是连续的。连续的输入域根据输出域被分割为均匀的片段。每一个输出域中的值 y 都可以定义为输入域中 x 值的一个线性函数:x: y = m round(x) + b. 参考 bl.ocks.org/4060606 获取示例。
d3.scaleQuantize() 返回 quantize对象
var color = d3.scaleQuantize()
.domain([0, 1])
.range(["brown", "steelblue"]);
color(0.49); // "brown"
color(0.51); // "steelblue"
var width = d3.scaleQuantize()
.domain([10, 100])
.range([1, 2, 4]);
width(20); // 1
width(50); // 2
width(80); // 4
quantize.invertExtent(value) 返回x对应y的取值范围
var width = d3.scaleQuantize()
.domain([10, 100]) // x
.range([1, 2, 4]); // y
width.invertExtent(2); // [40, 70]
quantize.range([range]) 略
quantize.ticks([count])
quantize.tickFormat([count[, specifier]])
quantize.nice()
quantize.copy()
Quantile Scales 分位数比例尺
分位数比例尺将一个离散的输入域映射到一个离散的输出域。输入域被认为是连续的,因此可以接受任何合理的输入值。但是输入域被指定为一组离散的样本值,输出域中的值的数量决定了分位数的数量。为了计算分位数,输入域中的值会被排序。并且作为 population of discrete values(离散值总体).
参考 d3-array 的 quantile。参考例子: bl.ocks.org/8ca036b3505121279daf。
// 参考例子
d3.quantile(array, p[, accessor]) <源码>
// 返回指定 有序数组 的 p-分位数, p 是 [0, 1] 之间的小数. 例如中位数相当于 p = 0.5, 使用 p = 0.25 计算第一个四分位数, p = 0.75 表示第三个四分位数. 这个方法也使用 R-7 方法. 例如:
var a = [0, 10, 30];
d3.quantile(a, 0); // 0
d3.quantile(a, 0.5); // 10
d3.quantile(a, 1); // 30
d3.quantile(a, 0.25); // 5
d3.quantile(a, 0.75); // 20
d3.quantile(a, 0.1); // 2
// 如果指定了 accessor 则相当于在计算之前调用了 array.map(accessor).
d3.scaleQuantile() 略 , API参考量化比例尺
Threshold Scales 阈值比例尺
阈值比例尺与 quantize scales 类似,只不过它们允许将输入域的任意子集映射到输入域的离散值。输入域依旧是连续的,并且会根据输出域分片。参考 bl.ocks.org/3306362。
d3.scaleThreshold() 返回threshold对象
var color = d3.scaleThreshold()
.domain([0, 1])
.range(["red", "white", "green"]);
color(-1); // "red"
color(0); // "white"
color(0.5); // "white"
color(1); // "green"
color(1000); // "green"
var color = d3.scaleThreshold()
.domain([0, 1])
.range(["red", "white", "green"]);
color.invertExtent("red"); // [undefined, 0]
color.invertExtent("white"); // [0, 1]
color.invertExtent("green"); // [1, undefined]