D3.js & nvd3.js - Как установить диапазон оси Y
Я пытаюсь установить диапазон оси Y диаграммы с 1-100.
Проконсультировался с документацией по API и нашел возможное решение с помощью axis.tickValues, как показано здесь.
https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-tickValues
Однако использование опции не работает. Далее, прочитав страницу документации, связанную выше в разделе axis.tickSize, была отмечена следующая строка
Конечные тики определяются связанным масштабом, и являются частью сгенерированной области пути, а не тиковой линией
Итак, я беру его, чтобы установить min и max диапазона не может быть сделано с помощью опции Axis.
Любые идеи о том, где я могу указать диапазон?
Ответы
Ответ 1
Найден решение.
Добавление .forceY([0,100])
к созданию экземпляра диаграммы заставляет ось принимать диапазон, указанный в массиве.
Из примера здесь http://nvd3.org/livecode/#codemirrorNav
Применяется .forceY([0,100])
к переменной диаграммы.
Ответ 2
Как следует из названия, это добавляет значения в массив в ваш домен y
, он не устанавливает для домена y значение [0,100]
. Поэтому, если вы установите для этого параметра значение [0,100]
, а ваша область данных -10
- 110
, домен будет [-10,110]
.
Теперь, если вы хотите, чтобы домен был [0,100]
, даже если ваши данные больше, вы можете использовать chart.yDomain([0,100])
... НО обычно вы хотите, чтобы ваш домен включал или ваши данные, поэтому я настоятельно рекомендую использовать chart.forceY вместо of chart.yDomain
. Как вы увидите, одним из наиболее распространенных применений для forceY является forceY([0])
, чтобы всегда делать 0 в домене.
Надеюсь, что это поможет вам понять, что на самом деле выполняет функция, и arboc7, это должно объяснить, почему это не работает, делая диапазон меньше, чем набор данных.
Ответ 3
Для диаграмм с разбивкой по областям .forceY([0,100])
не работает.
Вместо этого используйте .yDomain([0,100])
Ответ 4
Если вы имеете в виду установку y-domain
(диапазон номеров, который должен отображаться) для диаграмм с разбивкой по областям, это работает для меня:
nv.models.stackedAreaChart()
.x(function(d) {...})
.y(function(d) {...})
.yDomain([0, maxY])
...
Ответ 5
Я пробовал:
chart.forceY([DataMin, DataMax]);
Datamin и Datamax необходимо вычислять из массива. Кроме того, чтобы настраивать точки оси динамически, когда применяется фильтр, необходимо настроить пользовательские события щелчка фильтра, например:
$('g.nv-series').click(function() {
//Calculate DataMin, DataMax from the data array
chart.forceY([DataMin, DataMax]);
});
Таким образом, график будет регулировать каждый раз, когда применяется фильтр.
Ответ 6
У меня была аналогичная проблема и разрешила ее, явно определяя домен в yScale yAxis, то есть
var yscale = d3.scale.linear()
.domain([0,100])
.range([250, 0]);
var yAxis = d3.svg.axis()
.scale(yscale);