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 диапазона не может быть выполнена через параметр оси.



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

348   6  

6 ответов:

нашел решение.

добавление .forceY([0,100]) для создания экземпляра диаграммы заставляет ось принимать диапазон, указанный в массиве.

из примера здесь http://nvd3.org/livecode/#codemirrorNav

добавление .forceY([0,100]) для работы переменной диаграммы.

как следует из названия, это добавляет значения в массиве к вашему y домен, он не устанавливает домен y в [0,100]. Так что если вы установите это в [0,100] и домен ваших данных -10 до 110 домен будет [-10,110].

теперь, если вы хотите, чтобы домен был [0,100] даже если ваши данные больше, вы можете использовать chart.yDomain([0,100]) ... Но обычно вы хотите, чтобы ваш домен включал или ваши данные, поэтому я настоятельно рекомендую использовать диаграмму.Форси вместо chart.yDomain. Как вы смотрите, одно из самых распространенных применений forceY -forceY([0]) сделать 0 всегда в домен.

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

для сложенных диаграмм, .forceY([0,100]) не работает. Вместо того, чтобы использовать .yDomain([0,100])

Если вы имеете в виду задание y-domain (диапазон чисел, которые должны отображаться) для диаграмм с накоплением областей, это работает для меня:

nv.models.stackedAreaChart()
  .x(function(d) {...})
  .y(function(d) {...})
  .yDomain([0, maxY])
...

Я пробовал так:

chart.forceY([DataMin, DataMax]);

Datamin и Datamax нужно вычислить из массива. Кроме того, для динамической настройки точек оси при применении фильтра необходимо настроить события щелчка фильтра, такие как:

$('g.nv-series').click(function() {
   //Calculate DataMin, DataMax from the data array                    
   chart.forceY([DataMin, DataMax]);                        
});

поэтому график будет корректироваться каждый раз, когда применяется фильтр.

У меня была аналогичная проблема, и я решил ее, явно определив домен в yScale yAxis, т. е.

var yscale = d3.scale.linear()
                     .domain([0,100])
                     .range([250, 0]);
var yAxis = d3.svg.axis()
                  .scale(yscale);

Comments

    Ничего не найдено.