2014-10-29 21 views
5

Używam NVD3 aby wyświetlić wykres liniowy tutaj: http://jsbin.com/xodaxafiti/2/edit?js,outputNVD3 Linia Wykres osi x Kleszcze brakuje

Ale wydaje się, że NVD3 auto ukryć niektóre tickLabels na OśX, ale tylko tych kleszczy w pobliżu krawędzi, czyli 2- 3Oct i 27-28Oct (z wyjątkiem pierwszego i ostatniego tiku). Wiem, że jest to automatyczna redukcja, ponieważ gdy zwiększam szerokość wykresu, zaczynają pojawiać się tyknięcia. Jednak uważam, że to zachowanie redukujące jest dziwne, a lineChart nie ma opcji reduceXTicks, takich jak multiBarChart.

Chcę być w stanie kontrolować zachowanie Zmniejszanie się jak this:

var chart = nv.models.lineChart()  
    .useInteractiveGuideline(true) 
    .margin({left: 80,top: 20,bottom: 120,right: 20}); 

chart.xAxis.ticks(function() { 
    return data[0].map(chart.x()).filter(function(d,i) { 
     i % Math.ceil(data[0].values.length/(availableWidth/100)) === 0; 
    }) 
}) 

Ale to nie działa. Ktoś ma jakiś pomysł, jak to kontrolować?

missing tickLabels

+0

użytku '.tickValues ​​()' zamiast '.ticks()'. –

+0

Próbowałem wcześniej używać '.tickFormat()', ale dało mi filtr nad powyższymi brakującymi tickLabels. Poza tym podczas używania tej sztuczki ukryta etykieta nie pojawi się nawet w etykiecie narzędzia. Wierzę, że 'tickValues ​​()' będzie miał taki sam wynik. – yonasstephen

+0

Hmm, użyłbym skali czasu dla osi X - powinno to pozwolić ci lepiej kontrolować to, co pokazane. [To pytanie] (http://stackoverflow.com/questions/14058876/how-do-i-display-dates-on-the-x-axis- for-nvd3-d3-js) powinno być pomocne w tym. –

Odpowiedz

13

Zachowanie zmniejszenie działa ponieważ showMaxMin ustawiona na true domyślnie. Dodawanie .showMaxMin(false) rozwiązuje problem:

chart.xAxis.axisLabel("XAxisLabel") 
    .showMaxMin(false)  
    .tickValues(tickvalues)   
    .tickFormat(function (d) { 
     return tickformat[d]; 
     }) 
; 

enter image description here

+0

wow dzięki, stary! – yonasstephen

+0

minMax mnie uratował! – bravokeyl

+0

Uważaj, że nie masz żadnych wartości tickowych, które są poza zasięgiem lub pojawią się na lewo od yaxis. możesz także użyć 'xDomain', aby ustawić zasięg xAxis –

0

W przypadku, gdy chcesz mieć zarówno brzegowe kleszczy i kleszczy w pobliżu granicy wartości (maxmin), można zmodyfikować źródła.

W nv.models.axis(), to jest bufor podane przy showMaxMin odnosi się do dolnej/górnym położeniu:

if (showMaxMin && (axis.orient() === 'top' || axis.orient() === 'bottom')) { 
      var maxMinRange = []; 
      wrap.selectAll('g.nv-axisMaxMin') 
       .each(function(d,i) { 
        try { 
         if (i) // i== 1, max position 
          maxMinRange.push(scale(d) - this.getBoundingClientRect().width - 4); //assuming the max and min labels are as wide as the next tick (with an extra 4 pixels just in case) 
         else // i==0, min position 
          maxMinRange.push(scale(d) + this.getBoundingClientRect().width + 4) 
        }catch (err) { 
         if (i) // i== 1, max position 
          maxMinRange.push(scale(d) - 4); //assuming the max and min labels are as wide as the next tick (with an extra 4 pixels just in case) 
         else // i==0, min position 
          maxMinRange.push(scale(d) + 4); 
        } 
       }); 
      // the g's wrapping each tick 
      g.selectAll('g').each(function(d, i) { 
       if (scale(d) < maxMinRange[0] || scale(d) > maxMinRange[1]) { 
        if (d > 1e-10 || d < -1e-10) // accounts for minor floating point errors... though could be problematic if the scale is EXTREMELY SMALL 
         d3.select(this).remove(); 
        else 
         d3.select(this).select('text').remove(); // Don't remove the ZERO line!! 
       } 
      }); 
} 

po prostu usunięte z tych buforów:

try { 
     if (i) // i== 1, max position 
      maxMinRange.push(scale(d)); 
     else // i==0, min position 
      maxMinRange.push(scale(d)) 
}catch (err) { 
     if (i) // i== 1, max position 
       maxMinRange.push(scale(d)); 
     else // i==0, min position 
       maxMinRange.push(scale(d)); 
} 
Powiązane problemy