2014-10-29 16 views
5

ich NVD3 bin mit Liniendiagramm angezeigt werden hier: http://jsbin.com/xodaxafiti/2/edit?js,outputNVD3 Liniendiagramm X-Achse Ticks fehlen

Aber es scheint, wie NVD3 einige tickLabels auf XAxis Auto-verstecken, aber nur die Zecken in der Nähe der Kante, das heißt 2- 3Okt und 27-28Okt (außer dem ersten und letzten Tick). Ich weiß, dass dies eine automatische Reduzierung ist, denn wenn ich die Breite des Diagramms vergrößere, werden die Ticks angezeigt. Allerdings finde ich, dass dieses Verhalten merkwürdig ist, und das lineChart hat keine reduceXTicks-Option wie multiBarChart.

Ich möchte das Reduktionsverhalten in der Lage sein, mich zu beherrschen wie 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; 
    }) 
}) 

Aber es hat nicht funktioniert. Hat jemand eine Idee, wie man das kontrollieren kann?

missing tickLabels

+0

Verwendung '.tickValues ​​()' anstelle von '.ticks()'. –

+0

Ich habe versucht, '.tickFormat()' vor, aber es gab mir einen Filter über die oben fehlenden tickLabels. Wenn Sie diesen Trick anwenden, wird das versteckte Etikett nicht einmal im Tooltip angezeigt. Ich glaube, 'tickValues ​​()' wird das gleiche Ergebnis haben. – yonasstephen

+0

Hmm, ich würde eine Zeitskala für die x-Achse verwenden - das sollte es dir ermöglichen, besser zu kontrollieren, was gezeigt wird. [Diese Frage] (http://stackoverflow.com/questions/14058876/how-do-i-display-dates-on-the-x-axis-for-nvd3-d3-js) sollte dafür hilfreich sein. –

Antwort

13

Das Reduktionsverhalten funktioniert, weil der showMaxMin Satz standardmäßig auf true. Hinzufügen .showMaxMin(false) behebt das Problem:

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

enter image description here

+0

wow danke, Mann! – yonasstephen

+0

minMax hat mich gerettet! – bravokeyl

+0

Achten Sie darauf, dass Sie keine Tickwerte außerhalb der Reichweite haben oder links von den Yaxis erscheinen. Sie können auch 'xDomain' verwenden, um das Ausmaß der xAxis festzulegen –

0

Falls Sie sowohl die Grenze Zecken und die Zecken nahe der Grenze (MaxMin) Werte haben wollen, können Sie die Quelle ändern.

In dem nv.models.axis() gibt es einen Puffer gegeben, wenn für eine showMaxMin unten/oben Orientierung erfüllt ist:

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!! 
       } 
      }); 
} 

I diese Puffer gerade entfernt:

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)); 
} 
Verwandte Themen