2014-10-29 20 views
5

Tôi đang sử dụng NVD3 để hiển thị biểu đồ đường thẳng ở đây: http://jsbin.com/xodaxafiti/2/edit?js,outputNVD3 Dòng Chart X Axis Bọ ve đang thiếu

Nhưng nó có vẻ như NVD3 tự động ẩn một số tickLabels trên Xaxis, nhưng chỉ những ve gần cạnh, tức là 2- 3Oct và 27-28Oct (ngoại trừ dấu đầu tiên và cuối cùng). Tôi biết rằng đây là tự động giảm vì khi tôi tăng chiều rộng của biểu đồ, các dấu tích bắt đầu xuất hiện. Tuy nhiên tôi thấy rằng hành vi này giảm lạ, và lineChart không có tùy chọn reduceXTicks như multiBarChart.

Tôi muốn để có thể kiểm soát hành vi giảm bản thân mình như 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; 
    }) 
}) 

Nhưng nó đã không làm việc. Bất cứ ai có bất kỳ ý tưởng làm thế nào để kiểm soát này?

missing tickLabels

+0

Sử dụng '.tickValues ​​()' thay vì '.ticks()'. –

+0

Tôi đã thử sử dụng '.tickFormat()' trước đây, nhưng nó đã cho tôi một bộ lọc trên đầu trang của các tickLabels thiếu ở trên. Bên cạnh đó, khi sử dụng thủ thuật này, nhãn ẩn sẽ không hiển thị ngay cả trong chú giải công cụ. Tôi tin rằng 'tickValues ​​()' sẽ có kết quả tương tự. – yonasstephen

+0

Hmm, tôi sẽ sử dụng thang thời gian cho trục x - điều này sẽ cho phép bạn kiểm soát tốt hơn những gì được hiển thị. [Câu hỏi này] (http://stackoverflow.com/questions/14058876/how-do-i-display-dates-on-the-x-axis-for-nvd3-d3-js) phải hữu ích cho điều đó. –

Trả lời

13

Các hành vi giảm việc vì showMaxMin set là true theo mặc định. Thêm .showMaxMin(false) sửa chữa các vấn đề:

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

enter image description here

+0

wow cảm ơn, người đàn ông! – yonasstephen

+0

minMax đã cứu tôi! – bravokeyl

+0

xem ra rằng bạn không có bất kỳ dấu chấm nào nằm ngoài phạm vi hoặc chúng sẽ xuất hiện ở bên trái của yaxis. bạn cũng có thể sử dụng 'xDomain' để đặt phạm vi của xAxis –

0

Trong trường hợp bạn muốn có cả các dấu ranh giới và ve gần ranh giới (MaxMin) giá trị, bạn có thể sửa đổi mã nguồn.

Trong nv.models.axis(), có một bộ đệm đưa ra khi showMaxMin là đúng đối với đáy/đỉnh hướng:

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

Tôi chỉ cần loại bỏ các bộ đệm:

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)); 
} 
Các vấn đề liên quan