从文档中,定义是:
量化
..线性刻度的变体,具有离散而不是连续的范围。输入域仍然是连续的,并根据输出范围(的基数)中值的数量划分为均匀的段。
分位数
...将输入域映射到离散范围。尽管输入域是连续的并且标尺可以接受任何合理的输入值,但输入域被指定为一组离散的值。输出范围(的基数)中的值的数量决定了将从输入域计算的分位数的数量
这些似乎都将连续输入域映射到一组离散值。任何人都可以阐明区别吗?
从文档中,定义是:
..线性刻度的变体,具有离散而不是连续的范围。输入域仍然是连续的,并根据输出范围(的基数)中值的数量划分为均匀的段。
...将输入域映射到离散范围。尽管输入域是连续的并且标尺可以接受任何合理的输入值,但输入域被指定为一组离散的值。输出范围(的基数)中的值的数量决定了将从输入域计算的分位数的数量
这些似乎都将连续输入域映射到一组离散值。任何人都可以阐明区别吗?
一般而言,差异类似于平均值和中位数之间的差异。
只有当输入域中的值的数量大于输出域中的值的数量时,这种差异才真正明显。最好用一个例子来说明。
对于quantize
标尺,输入范围根据输出范围被分成均匀的段。也就是说,域中值的数量并不重要。因此它为 0.2 返回 1,因为 0.2 比 100 更接近 1。
比例基于输入域的quantile
分位数,因此受其中值数量的影响。输出域中的值数量仅决定计算多少分位数。就其本质而言,分位数反映了实际的值列表,而不仅仅是范围。因此,0.2 的输入返回 100,因为相应的分位数更接近 100。
我自己也有同样的问题。所以我做了一个可视化来帮助理解它们是如何工作的。
着色图有一个很好的视觉解释。
量化:
分位数:
在散点图上,以前的水平条现在是垂直的,因为每个地方的颜色是由它的排名而不是值决定的。
这是 D3 v4 中的代码片段,显示了量化和分位数的不同结果。
const purples = [
'purple1',
'purple2',
'purple3',
'purple4',
'purple5'
]
const dataset = [1, 1, 1, 1, 2, 3, 4, 5] // try [1, 2, 3, 4, 5] as well
const quantize = d3.scaleQuantize()
.domain(d3.extent(dataset)) // pass the min and max of the dataset
.range(purples)
const quantile = d3.scaleQuantile()
.domain(dataset) // pass the entire dataset
.range(purples)
console.log(quantize(3)) // purples[3]
console.log(quantile(3)) // purples[4]
据我所知,区别在于统计分位数是有限的、相等的、均匀分布的离散块/桶,您的结果只是落入其中。不同之处在于量化比例是基于离散输入的连续函数。
基本上:量化允许插值和外推,其中分位数将值强制到子集中。
因此,例如,如果学生的计算成绩在量化尺度上是 81.7%,那么百分位数的分位数尺度只会说它是第 81 个百分位。那里没有灵活的空间。