Skip to content

RU Временные шкалы

Mingun edited this page May 8, 2014 · 3 revisions

ВикиСправка по APIРабота со временемВременн́ые шкалы
English | Русский

Временн́ые шкалы D3 являются расширением d3.scale.linear, использующим JavaScript-объекты Date для представления домена. Таким образом, в отличие от обычной линейной шкалы, значения домена при водятся к датам, а не числам; аналогично, функция invert возвращает даты. Удобнее всего то, что временн́ая шкала также предоставляет подходящие засечки на основе временн́ых интервалов, принимая на себя заботы по генерированию осей для почти любых временн́ых доменов.

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

# d3.time.scale()

Конструирует новую временн́ую шкалу с доменом и диапазоном по умолчанию; засечки и формат засечек настраиваются для местного времени.

# d3.time.scale.utc()

Конструирует новую временн́ую шкалу с доменом и диапазоном по умолчанию; засечки и формат засечек настраиваются для времени UTC.

# scale(x)

По указанной дате x входного домена возвращает соответствующее значение в выходном диапазоне.

# scale.invert(y)

Возвращает дату x во входном домене для соответствующего значения y в выходном диапазоне. Метод представляет собой обратное отображение из диапазона в домен. Для верных значений y в выходном диапазоне, выражение scale(scale.invert(y)) эквивалентно y; аналогично, для верных значений x во входном домене, выражение scale.invert(scale(x)) эквивалентно x. Оператор invert особенно полезен при интерактивном взаимодействии, например, для определения даты во входном домене, соответствующей положению пикселя под курсором мыши.

# scale.domain([dates])

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

# scale.range([values])

Если указан параметр values, устанавливает выходной диапазон шкалы в указанный массив значений. Массив должен содержать два или более значений, количество которых должно совпадать с количеством значений во входном домене. Элементы в переданном массиве не обязательно должны быть числами; будет работать любое значение, поддерживаемое соответствующим интерполятором. Однако, для работы оператора invert требуется числовой диапазон. Если параметр values не указан, возвращает текущий выходной диапазон шкалы.

# scale.rangeRound([values])

Устанавливает выходной диапазон шкалы в указанный массив значений values, попутно устанавливая интерполятор шкалы в d3.interpolateRound. Это сделано для удобства, когда выходные значения шкалы должны быть целыми числами, например, для избегания артефактов, связанных со сглаживанием. Также возможно округлять выходные значения вручную после применения шкалы.

# scale.interpolate([factory])

Если указан параметр factory, устанавливает выходной интерполятор шкалы, используя указанную фабрику. Фабрика интерполяторов по умолчанию установлена в d3.interpolate и используется для отображения нормализованного параметра домена t в диапазоне [0, 1] на соответствующее значение в выходном диапазоне. Фабрика интерполяторов будет использоваться для конструирования интерполяторов для каждой пары смежных значений из выходного диапазона. Если параметр factory не указан, возвращает текущую фабрику интерполяторов шкалы.

# scale.clamp([boolean])

Если указан параметр boolean, включает или отключает режим отсечения. По умолчанию, режим отсечения отключён, так что если значение, переданное в шкалу, находится за пределами входного домена, шкала может вернуть значение за пределами выходного диапазона, полученное путём линейной экстраполяции. Например, с доменом и диапазоном по умолчанию [0, 1], входное значение 2 вернёт выходное значение 2. Если отсечение включено, нормализованный параметр домена t будет отсекаться по диапазону [0, 1], так что возвращаемое шкалой значение всегда будет находится внутри выходного диапазона шкалы. Если параметр boolean не указан, возвращает признак того, отсекает ли сейчас шкала значения за пределами выходного диапазона, или нет.

# scale.nice([interval[, step]])
# scale.nice([count])

Расширяет домен таким образом, чтобы он начинался и заканчивался симпатичными круглыми значениями, определяемыми указанным временн́ым интервалом interval и необязательным шагом step. Как альтернатива явному указанию временн́ого интервала, может быть указано количество count, и временной интервал будет выбран автоматически, соответствующий scale.ticks. Если пареметр count не указан, по умолчанию он будет равным 10.

Этот метод обычно изменяет домен шкалы и может только расширить границы до ближайшего круглого значения. Приведение к симпатичному виду может быть полезно, если домен вычисляется из данных и может быть неоднородным. Например, для домена [2009-07-13T00:02, 2009-07-13T23:48] симпатичным доменом будет [2009-07-13, 2009-07-14]. Если домен имеет более двух значений, приведение к симпатичному виду затронет только первое и последнее значение.

# scale.ticks([interval[, step]])
# scale.ticks([count])

Возвращает репрезентативные даты из входного домена шкалы. Возвращаемые значения засечек равномерно разбросаны по домену (с учётом нерегулярности временн́ых интервалов, вроде месяцев и високосных годов), имеют человеко-читаемые значения (например, полночь) и гарантированно находятся внутри входного домена. Засечки часто используются для отображения опорных линий или маркеров в сочетании с визуализированными данными.

Если параметр count является числом, возвращает приблизительно count засечек. Если пареметр count не указан, по умолчанию он будет равным 10. Указанное значения количества является всего лишь подсказкой; шкала может вернуть как больше, так и меньше значений, в зависимости от входного домена. Если указан временной интервал interval, то для генерирования засечек будет использоваться функция range временн́ого интервала, с передачей ей необязательного аргумента шага step, если тот присутствует. Например, для создания десяти засечек по умолчанию, можно написать:

scale.ticks(10);

А для создания засечек с 15-ти минутным интервалом, написать:

scale.ticks(d3.time.minute, 15);

Обратите внимание: для шкал UTC убедитесь, что вы используете соответствующий метод диапазона UTC (например, d3.time.minute.utc).

Для автоматических засечек рассматриваются следующие временн́ые интервалы:

Этот набор временн́ых интервалов несколько произволен и в будущем могут добавится дополнительные значения.

# scale.tickFormat(count)

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

Рассматриваются следующие форматы времени:

  • %Y — когда границами являются годы, например, "2011".
  • %B — когда границами являются месяцы, например, "февраля".
  • %b %d — когда границами являются недели, например, "фев 06".
  • %a %d — когда границами являются дни, например, "пн 07".
  • %I %p — когда границами являются часы, например, "01 AM".
  • %I:%M — когда границами являются минуты, например, "01:23".
  • :%S — когда границами являются секунды, например, ":45".
  • .%L — миллисекунды для всех остальных времён, например, ".012".

При использовании мульти-масштабного формата времени, формат засечек по умолчанию предоставляется как для локального, так и для глобального контекста для каждого временн́ого интервала. Например, показывая последовательность [11 PM, пн 07, 01 AM], функция форматирования засечек показывает информацию о часах, датах и днях одновременно, а не просто часы. Если вы предпочитаете одно-масштабное форматирование времени, вы всегда можете использовать свой собственный d3.time.format. Также вы можете задать свой собственный мульти-масштабный формат времени.

# scale.copy()

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

Clone this wiki locally