Я использую 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()
функция d3.scaleQuantile()
?
Здесь есть недоразумение: в шкале 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>
Я подозреваю, что вы используете пределы диапазона как minMass
и maxMass
. Если это так, то это не сработает: домен делится на равные сегменты. Пусть это докажет:
var sortMass = d3.scaleQuantile()
.domain([2000,120000])
.range([2000, 4000, 6000, 8000, 100000, 120000]);
console.log(sortMass(6500))
<script src="https://d3js.org/d3.v4.min.js"></script>
И то, что 2000
на выходе, должным образом ожидается.
Поэтому, если мое предположение выше правильно, вы должны использовать пороговую шкалу:
var thresholds = [2000, 4000, 6000, 8000, 100000, 120000];
var sortMass = d3.scaleThreshold()
.domain(thresholds)
.range(thresholds);
console.log(sortMass(6500))
<script src="https://d3js.org/d3.v4.min.js"></script>
Заключение:
Итак, чтобы ответить на ваш вопрос:
Может ли кто-нибудь объяснить, как
d3.scaleQuantile()
функцияd3.scaleQuantile()
?
Для любой шкалы D3 вы передаете значение в соответствии с доменом, и масштаб вернет значение в соответствии с диапазоном. Помните: