Ответ 1
Мотивация квантильной шкалы состоит в том, чтобы получить классы, которые представляют фактическое распределение значений в наборе данных. Поэтому необходимо предоставить его при построении с полным списком значений. Затем шкала разбивает входную область (определяемую этими значениями) на интервалы (квантили), так что примерно одинаковое количество значений попадает в каждый из интервалов.
Из документации:
Для вычисления квантилей входной домен сортируется и рассматривается как совокупность дискретных значений.
Следовательно, при указании домена мы передаем в масштабе весь список значений:
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"