2014-01-12 6 views
0

Моя диаграмма повторяет значения по оси y. Есть ли способ, я могу только 1,2,3, но ничего между (например, проблема, которую я показано на графике ниже по оси у):nvd3 предотвращает повторные значения по оси y

enter image description here

Код им с помощью что-то вроде это:

nv.addGraph(function() { 
    var chart = nv.models.multiBarChart(); 

    chart.xAxis 
     .tickFormat(function(d) { return d3.time.format('%x')(new Date(d)) }); 

    chart.yAxis 
     .tickFormat(d3.format(',.1f')); 

    d3.select('#errorsFiredByDate') 
     .datum([{values: output, key: "Count by date"}]) 
     .transition() 
     .duration(500) 
     .call(chart); 

     nv.utils.windowResize(chart.update); 

    return chart; 
}); 
+0

Не уверен, что там происходит - ваш формат номера указывает, что должно быть одно значение после запятой ('» , .1f''). Вы пытались изменить этот спецификатор формата и посмотреть, что произойдет? –

+0

Я установил его на скриншот выше, используя '0f', я попробовал раньше с' .1f', который находится в образце кода, он помещает десятичные разряды, но я бы предпочел не иметь 0.5. Я думал, что использование '0f' исправит его, но оно все равно ставит два' 1 ' – Akshat

+0

. А, ну, вы хотите контролировать количество тиков/фактических тиков? –

ответ

2

У вас есть несколько вариантов контроля тиков по оси D3. Вы можете указать количество тиков явно с помощью .ticks(), но это скорее намек на макет, который можно игнорировать. Если вы хотите быть абсолютно уверены в тиках, используйте .tickValues(), чтобы установить значения тика явно.

В вашем случае это будет выглядеть примерно так.

chart.yAxis.tickValues(d3.range(chart.yAxis.scale().domain()[0], chart.yAxis.scale().domain()[1]); 

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

1

Поздний ответ, но может быть полезен другим. Я использую обходное решение для устранения повторяющихся тиков, поддерживая массив уже примененных тиков. d3 - многоформатный спецификатор.

uniqueTicks = []; 
xTickFormat = d3.time.format.multi([ 
            ["%Y", function (d) { 
             if (uniqueTicks.indexOf(d.getFullYear()) === -1) { 
              uniqueTicks.push(d.getFullYear()); 
              return true; 
             } else { 
              return false; 
             }           
            }], 
            ["", function() { 
             return true; 
            }] 
           ]); 

d3.svg.axis().tickFormat(xTickFormat); 

Этот трюк может быть изменен для любого другого типа тикового формата.

1

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

yAxis: { 
     tickFormat: function(d){ 
     if ((d * 10) % 10 === 0) { 
      return d3.format('.0f')(d); 
     } 
     else { 
      return ''; 
     } 
     } 
    } 
Смежные вопросы