2012-04-16 30 views
6

Trong biểu đồ đường HighChart, dữ liệu chuỗi đang được nạp từ ứng dụng Ruby on Rails của tôi. Đôi khi các giá trị chuỗi là số không hoặc ít hơn mà là một vấn đề đối với HighCharts và nó ném ngoại lệ sau đây:Highcharts - cách tốt nhất để xử lý và hiển thị giá trị 0 (hoặc âm) trong chuỗi biểu đồ đường thẳng với trục Y lôgarit

Highcharts Error #10 
Can't plot zero or subzero values on a logarithmic axis 

Vì vậy, khi một công việc xung quanh, tôi xử lý mảng ruby ​​của tôi để có điều kiện thay thế một số không có giá trị ít hơn với một số dương không đáng kể, .eg 0,00001 như hình dưới đây:

oil_vol_array = d_array[1].map { |e| (e < 0.0001) ? 0.0001 : e.round(3) } 

Điều này ngăn cản các ngoại lệ được ném, nhưng màn hình hiển thị đồ thị bắt đầu từ 0,0001 nếu giá trị khởi đầu là zero (dễ hiểu như vậy, kể từ khi tôi hỏi nó). Một màn hình nhiều hơn mong muốn sẽ được bắt đầu đồ thị tại zero, nhưng HighChart không thích nó :(

Có cách nào điều này có thể đạt được?

Trả lời

9

Bạn đã cố gắng sử dụng một label formatter?

var chart = new Highcharts.Chart({ 
    yAxis: {   
     labels: { 
      formatter: function() { 
       if(this.value === 0.00001){ 
        return 0; 
       } else { 
        return this.value; 
       } 
      } 
     } 
    } 
}); 
+0

Cảm ơn bạn. Không biết về nó. Đây là ngày thứ 2 của tôi với HighCharts :) – Bharat

1

Khi xử lý các số lớn, tốt hơn là sử dụng trình định dạng nhãn chuẩn cho các giá trị khác 0, nếu không nhãn của bạn sẽ được hiển thị như thế này: 1000000000 ... Để thay đổi điều này thay thế câu lệnh 'else' sang cuộc gọi đến phương pháp định dạng nhãn gốc dưới đây:

var chart = new Highcharts.Chart({ 
    yAxis: {   
     labels: { 
      formatter: function() { 
       if(this.value === 0.00001){ 
        return 0; 
       } else { 
        return Highcharts.Axis.prototype.defaultLabelFormatter.call(this); 
       } 
      } 
     } 
    } 
});