我使用d3.scaleQuantile()
获取一些特定的数字输出,d3.scaleQuantile()
的范围是一个包含8个数字的数组。我console.log()在范围的中间位置的数字,它返回该范围的第一个。代码看起来像这样
var sortMass = d3.scaleQuantile()
.domain([minMass, maxMass])
.range([2000,4000,6000,8000,100000,120000])
console.log(sortMass(6500)) // here shows 2000
如果它返回6000或8000,那就更有意义了。但我无法弄清楚为什么输出是2000.我读过D3文档,但我仍然感到困惑。任何人都可以解释d3.scaleQuantile()
函数的工作原理吗?
答案 0 :(得分:1)
这里有一个误解:在D3等级中,任何比例尺,你都不会将范围内的值传递给比例尺。而不是那样,你在域中传递一个值。
所以,鉴于你的规模......
var sortMass = d3.scaleQuantile()
.domain([minMass, maxMass])
.range([2000, 4000, 6000, 8000, 100000, 120000]);
...如果您在minMass和maxMass 之间传递一个值,它将返回该范围内的对应值。
这是一个基本演示,我将minMass
设置为0
,将maxMass
设置为100
:
var minMass = 0,
maxMass = 100;
var sortMass = d3.scaleQuantile()
.domain([minMass, maxMass])
.range([2000, 4000, 6000, 8000, 100000, 120000]);
d3.range(0, 110, 10).forEach(function(d) {
console.log("for the value " + d + ", the output is:" + sortMass(d))
})

<script src="https://d3js.org/d3.v4.min.js"></script>
&#13;
我怀疑您使用范围限制为minMass
和maxMass
。如果确实如此,那么它就不会起作用:域名分为相等段。让我们证明一下:
var sortMass = d3.scaleQuantile()
.domain([2000,120000])
.range([2000, 4000, 6000, 8000, 100000, 120000]);
console.log(sortMass(6500))
&#13;
<script src="https://d3js.org/d3.v4.min.js"></script>
&#13;
输出中的2000
是合适的预期。
因此,如果我的上述假设是正确的,您应该使用阈值比例:
var thresholds = [2000, 4000, 6000, 8000, 100000, 120000];
var sortMass = d3.scaleThreshold()
.domain(thresholds)
.range(thresholds);
console.log(sortMass(6500))
&#13;
<script src="https://d3js.org/d3.v4.min.js"></script>
&#13;
<强>结论:强>
所以,回答你的问题:
任何人都可以解释
d3.scaleQuantile()
函数的工作原理吗?
对于任何D3比例,您都会根据域传递一个值,比例将根据范围返回一个值。记住: