d3.scale.quantile如何工作?

时间:2012-05-14 08:38:25

标签: d3.js

这个陈述的含义是什么?

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

如何计算quantze.quantiles的值?我尝试拨打quantize(2)但结果是1quantile如何运作?

2 个答案:

答案 0 :(得分:23)

分位数量表的动机是获得代表数据集中值的实际分布的类。因此,有必要在施工期间提供完整的值列表。然后,比例将输入域(由这些值定义)分成间隔(分位数),使得大约相同数量的值落入每个间隔中。

来自文档:

  

要计算分位数,输入域将被排序,并视为一组离散值。

因此,在指定域时,我们将整个值列表交给比例:

var scale = d3.scale.quantile()
  .domain([1, 1, 2, 3, 2, 3, 16])
  .range(['blue', 'white', 'red']);

如果我们再运行:

scale.quantiles()

它将输出[2,3],这意味着我们的值的数量被分成这三个子集,分别由'blue','white'和'red'表示:

[1, 1] [2, 2] [3, 3, 16]

请注意,当您要显示的数据中存在异常值时,应避免使用此比例。在上面的例子中,16是一个落入上分位数的异常值。它被赋予与3相同的类,这可能不是所期望的行为:

scale(3)   // will output "red"
scale(16)  // will output "red"

答案 1 :(得分:5)

我建议阅读quantile scale documentation,特别是关于quantize.quantiles()的文章

但基本上,d3看到此刻度的输出范围中有9个值,因此它根据2个值数据集创建9个分位数:[0,15]。
这会导致您在问题中显示的quantize.quantiles()值:[1.6,3.3,..,13.3],这些值表示分位数的边界 - 任何小于1.6的值都将映射到输出的第一个元素范围(在这种情况下为零)。小于3.3且大于1.6的任何内容都将映射到输出范围的第二个元素(一个)。因此,量化(2)= 1,如预期的那样。

相关问题