Подтвердить что ты не робот

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.

Любые идеи о том, где я могу указать диапазон?

4b9b3361

Ответ 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);