这句话的意思是什么?
quantize = d3.scale.quantile().domain([0, 15]).range(d3.range(9));我看到域名是:
0-0 1- 15
范围从0到8,quantize.quantiles
0 - 1.6
1 - 3.3
2 - 4.9
3 - 6.6
4 - 8.3
5 - 9.9
6 -11.6
7 -13.3如何计算quantize.quantiles的值?我试着打电话给quantize(2),但结果是1。quantile是如何工作的?
发布于 2013-07-09 16:52:45
分位数标度的动机是获取代表数据集中值实际分布的类。因此,有必要在施工期间为其提供完整的值列表。然后,标度将输入域(由这些值定义)分割为间隔(分位数),使大约相同数量的值落入每个间隔中。
从文件中:
为了计算分位数,对输入域进行排序,并将其视为离散值的总体。
因此,在指定域时,我们提交了值的整个列表:
var scale = d3.scale.quantile()
.domain([1, 1, 2, 3, 2, 3, 16])
.range(['blue', 'white', 'red']);如果我们接着跑:
scale.quantiles()它将输出2,3,这意味着我们的值被分割成这三个子集,分别由“蓝色”、“白色”和“红色”表示:
[1, 1] [2, 2] [3, 3, 16]请注意,当要显示的数据中存在异常值时,应避免此比例。在上面的例子中,16是一个掉进上分位数的离群值。它被分配给与3相同的类,这可能不是期望的行为:
scale(3) // will output "red"
scale(16) // will output "red"发布于 2012-05-26 02:47:16
我建议阅读分位数尺度文件,特别是在quantize.quantiles()上阅读
但是基本上,d3看到这个标度的输出范围中有9个值,所以它根据2个值数据集创建了9个分位数: 0,15。
这导致您在问题中显示的quantize.quantiles()值: 1.6、3.3、..13.3,这些表示分位数的界限--任何小于1.6的内容都将映射到输出范围的第一个元素(在本例中为零)。小于3.3且大于1.6的任何内容都将映射到输出范围(一个)的第二个元素。因此,量化(2)=1,如预期。
https://stackoverflow.com/questions/10579944
复制相似问题