Spec-Zone.ru › D3.js 3

Порядковые шкалы

Справочник API ▸ Шкалы ▸ Порядковые шкалы

Шкалы — это функции, отображающие входную область значений на выходной диапазон. Порядковые шкалы имеют дискретную область значений, например, набор имён или категорий. Также существуют количественные шкалы, у которых непрерывная область значений, например, множество вещественных чисел. Шкалы являются необязательной функцией в D3; вы можете обойтись и без них, если предпочитаете самостоятельно выполнять вычисления. Однако использование шкал может значительно упростить код, необходимый для отображения измерения данных в визуальном представлении.

Объект шкалы, например, тот, что возвращается d3.scale.ordinal, является одновременно объектом и функцией. То есть: вы можете вызвать шкалу как любую другую функцию, а также у шкалы есть дополнительные методы, изменяющие её поведение. Как и другие классы в D3, шкалы следуют методу цепочки вызовов, где методы-установщики возвращают саму шкалу, что позволяет вызывать несколько установок в одном кратком операторе.

d3.scale.ordinal()

Создаёт новую порядковую шкалу с пустой областью значений и пустым диапазоном. Порядковая шкала недействительна (всегда возвращает undefined) до тех пор, пока не будет указан выходной диапазон.

ordinal(x)

Принимая значение x из входной области значений, возвращает соответствующее значение в выходном диапазоне.

Если диапазон был задан явно (например, с помощью range, но не rangeBands, rangeRoundBands или rangePoints), и заданное значение x не входит в область значений шкалы, то x неявно добавляется в область значений; последующие вызовы шкалы с тем же значением x вернут то же значение y из диапазона.

ordinal.domain([values])

Если values задано, устанавливает входную область значений порядковой шкалы в указанный массив значений. Первый элемент в values будет сопоставлен с первым элементом в выходном диапазоне, второе значение области значений — со вторым значением диапазона и так далее. Значения области значений хранятся во внутренней ассоциативной таблице как сопоставление значения с индексом; полученный индекс затем используется для получения значения из выходного диапазона. Таким образом, значения порядковой шкалы должны быть преобразуемы в строку, а строковое представление значения области значений однозначно идентифицирует соответствующее значение диапазона. Если values не указано, этот метод возвращает текущую область значений.

Установка области значений для порядковой шкалы необязательна. Если область значений не задана, необходимо явно указать диапазон. В этом случае каждое уникальное значение, передаваемое функции шкалы, будет назначено новое значение из выходного диапазона; другими словами, область значений будет неявно определена из использования. Хотя области значений могут быть построены неявно, всё же рекомендуется явно задать область значений порядковой шкалы, чтобы обеспечить детерминированное поведение, так как определение области значений из использования будет зависеть от порядка.

ordinal.range([values])

Если values задано, устанавливает выходной диапазон порядковой шкалы в указанный массив значений. Первый элемент области значений будет сопоставлен с первым элементом в values, второе значение области значений со вторым значением диапазона и так далее. Если в диапазоне элементов меньше, чем в области значений, шкала будет переиспользовать значения с начала диапазона. Если values не указано, этот метод возвращает текущий выходной диапазон.

Этот метод предназначен для случаев, когда набор дискретных выходных значений вычисляется явно, например, набор категориальных цветов. В других случаях, таких как определение макета порядковой диаграммы рассеяния или столбчатой диаграммы, операторы rangePoints или rangeBands могут оказаться более удобными.

ordinal.rangePoints(interval[, padding])

Устанавливает выходной диапазон из указанного непрерывного interval. Массив interval содержит два элемента, представляющие минимальное и максимальное числовое значение. Этот интервал делится на n равномерно распределённых точек, где n — количество (уникальных) значений в входной области значений. Первая и последняя точка могут быть смещены относительно края интервала в соответствии с заданным padding, который по умолчанию равен нулю. Padding выражается как кратное расстоянию между точками. Разумное значение — 1.0, так что первая и последняя точка будут смещены от минимального и максимального значения на половину расстояния между точками.

rangepoints

var o = d3.scale.ordinal()
    .domain([1, 2, 3, 4])
    .rangePoints([0, 100]);

o.range(); // [0, 33.333333333333336, 66.66666666666667, 100]
ordinal.rangeRoundPoints(interval[, padding])

Подобно rangePoints, за исключением того, что гарантирует, что значения диапазона являются целыми числами, чтобы избежать артефактов размытия.

var o = d3.scale.ordinal()
    .domain([1, 2, 3, 4])
    .rangeRoundPoints([0, 100]);

o.range(); // [1, 34, 67, 100]

Обратите внимание, что округление неизбежно приводит к дополнительному внешнему отступу, который в среднем пропорционален длине области значений. Например, для области значений размером 50 может потребоваться дополнительный отступ 25px с каждой стороны. Изменение диапазона до значения, близкого к кратному длине области значений, может уменьшить дополнительный отступ.

var o = d3.scale.ordinal()
    .domain(d3.range(50))
    .rangeRoundPoints([0, 95]);

o.range(); // [23, 24, 25, …, 70, 71, 72]
o.rangeRoundPoints([0, 100]);
o.range(); // [1, 3, 5, …, 95, 97, 98]

(В качестве альтернативы вы можете вручную округлить выход шкалы или применить рендеринг форм: crispEdges. Однако это приведёт к неравномерно расположенным точкам.)

ordinal.rangeBands(interval[, padding[, outerPadding]])

Устанавливает выходной диапазон из указанного непрерывного interval. Массив interval содержит два элемента, представляющие минимальное и максимальное числовое значение. Этот интервал делится на n равномерно распределённых полос, где n — количество (уникальных) значений в области значений. Полосы могут смещаться от края интервала и других полос в соответствии с заданным padding, который по умолчанию равен нулю. Padding обычно находится в диапазоне [0,1] и соответствует количеству места в интервале диапазона, выделяемому для отступа. Значение 0,5 означает, что ширина полосы будет равна ширине отступа. Аргумент outerPadding предназначен для всей группы полос; значение 0 означает, что будет отступ только между полосами.

rangebands

var o = d3.scale.ordinal()
    .domain([1, 2, 3])
    .rangeBands([0, 100]);

o.rangeBand(); // 33.333333333333336
o.range(); // [0, 33.333333333333336, 66.66666666666667]
o.rangeExtent(); // [0, 100]
ordinal.rangeRoundBands(interval[, padding[, outerPadding]])

Подобно rangeBands, за исключением того, что гарантирует, что значения диапазона и ширина полосы являются целыми числами, чтобы избежать артефактов размытия.

var o = d3.scale.ordinal()
    .domain([1, 2, 3])
    .rangeRoundBands([0, 100]);

o.range(); // [1, 34, 67]
o.rangeBand(); // 33
o.rangeExtent(); // [0, 100]

Обратите внимание, что округление неизбежно приводит к дополнительному внешнему отступу, который в среднем пропорционален длине области значений. Например, для области значений размером 50 может потребоваться дополнительный отступ 25px с каждой стороны. Изменение диапазона до значения, близкого к кратному длине области значений, может уменьшить дополнительный отступ.

var o = d3.scale.ordinal()
    .domain(d3.range(50))
    .rangeRoundBands([0, 95]);

o.range(); // [23, 24, 25, …, 70, 71, 72]

o.rangeRoundBands([0, 100]);
o.range(); // [0, 2, 4, …, 94, 96, 98]

(В качестве альтернативы вы можете вручную округлить выход шкалы или применить рендеринг форм: crispEdges. Однако это приведёт к неравномерно расположенным и размещённым полосам.)

ordinal.rangeBand()

Возвращает ширину полосы. Когда диапазон шкалы настроен с помощью rangeBands или rangeRoundBands, шкала возвращает нижнее значение для данного ввода. Верхнее значение можно затем вычислить, сместив его на ширину полосы. Если диапазон шкалы настроен с помощью range или rangePoints, ширина полосы равна нулю.

ordinal.rangeExtent()

Возвращает массив из двух элементов, представляющий диапазон шкалы, т.е. наименьшее и наибольшее значения.

ordinal.copy()

Возвращает точную копию этой порядковой шкалы. Изменения в этой шкале не повлияют на возвращённую шкалу, и наоборот.

Цветовая палитра категорий

d3.scale.category10()

Создаёт новую порядковую шкалу с диапазоном из десяти категориальных цветов:

1f77b4 #1f77b4
ff7f0e #ff7f0e
2ca02c #2ca02c
d62728 #d62728
9467bd #9467bd
8c564b #8c564b
e377c2 #e377c2
7f7f7f #7f7f7f
bcbd22 #bcbd22
17becf #17becf

d3.scale.category20()

Создаёт новую порядковую шкалу с диапазоном из двадцати категориальных цветов:

1f77b4 #1f77b4
aec7e8 #aec7e8
ff7f0e #ff7f0e
ffbb78 #ffbb78
2ca02c #2ca02c
98df8a #98df8a
d62728 #d62728
ff9896 #ff9896
9467bd #9467bd
c5b0d5 #c5b0d5
8c564b #8c564b
c49c94 #c49c94
e377c2 #e377c2
f7b6d2 #f7b6d2
7f7f7f #7f7f7f
c7c7c7 #c7c7c7
bcbd22 #bcbd22
dbdb8d #dbdb8d
17becf #17becf
9edae5 #9edae5

d3.scale.category20b()

Создаёт новую порядковую шкалу с набором из двадцати категориальных цветов:

393b79 #393b79
5254a3 #5254a3
6b6ecf #6b6ecf
9c9ede #9c9ede
637939 #637939
8ca252 #8ca252
b5cf6b #b5cf6b
cedb9c #cedb9c
8c6d31 #8c6d31
bd9e39 #bd9e39
e7ba52 #e7ba52
e7cb94 #e7cb94
843c39 #843c39
ad494a #ad494a
d6616b #d6616b
e7969c #e7969c
7b4173 #7b4173
a55194 #a55194
ce6dbd #ce6dbd
de9ed6 #de9ed6

d3.scale.category20c()

Создаёт новую порядковую шкалу с набором из двадцати категориальных цветов:

3182bd #3182bd
6baed6 #6baed6
9ecae1 #9ecae1
c6dbef #c6dbef
e6550d #e6550d
fd8d3c #fd8d3c
fdae6b #fdae6b
fdd0a2 #fdd0a2
31a354 #31a354
74c476 #74c476
a1d99b #a1d99b
c7e9c0 #c7e9c0
756bb1 #756bb1
9e9ac8 #9e9ac8
bcbddc #bcbddc
dadaeb #dadaeb
636363 #636363
969696 #969696
bdbdbd #bdbdbd
d9d9d9 #d9d9d9

ColorBrewer

Библиотека D3 также включает в себя замечательные категориальные цветовые шкалы, разработанные Синтией Брюэр. Вы можете найти их в формате CSS или JavaScript в lib/colorbrewer. Для CSS, назначьте класс, например, "q0-3", "q1-3" или "q2-3" элементу, который вы хотите заполнить. Затем установите атрибут класса на родительском элементе (например, элементе SVG) с именем нужной цветовой шкалы, например, "RdBu" или "Blues". Примеры смотрите: диаграмма тепловой карты календаря, картограмма.

Для JavaScript вы можете использовать colorbrewer.RdBu[9] или эквивалент в качестве диапазона d3.scale.ordinal. Например:

var o = d3.scale.ordinal()
    .domain(["foo", "bar", "baz"])
    .range(colorbrewer.RdBu[9]);

© 2010–2016 Michael Bostock
Licensed under the BSD License.
https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API