2011-11-18 27 views
8

Tôi có dữ liệu dựa trên thời gian nằm trong khoảng từ 1 đến 500. Thời gian được vẽ trên trục x và các giá trị nằm trên trục y.Cách đặt giá trị tối thiểu tĩnh cho các trục trong Highcharts

Khi phạm vi giữa điểm dữ liệu tối thiểu và cực đại là tuyệt vời, nhãn bắt đầu của trục y là 0. Tôi có thể yêu cầu Highcharts không hiển thị nhãn bằng cách đặt yAxis.startOnTick = false; nhưng đó không thực sự là thứ tôi theo sau.

Here is a jsfiddle của sự cố mà bạn không thể biết liệu điểm đầu tiên là 0 hay một số giá trị khác. Có 0 ở đây cũng giống như phạm vi min cho y là 0, không 1.

Highcharts có thể hiển thị nhãn đầu tiên và nhãn đầu tiên phải luôn được đặt thành giá trị nhỏ nhất trong tập dữ liệu (tương ứng với trục của nó).

Trả lời

9

Tôi ngạc nhiên về sự khó khăn này. Không phải là một giải pháp tối ưu, nhưng tốt nhất I can dream up với api HighChart của:

var someData = [1,5,82,9,300,5,42,199,5,6,99,1,56,52,250,64]; 

var chart = new Highcharts.Chart({ 

    chart: { 
     renderTo: 'container' 
    }, 
    yAxis:{ 
     min: -10, 
     tickInterval: 1, 
     labels: { 
      formatter: function() { 
       if (this.value < someData[0]) 
        return null; 
       else if (this.value == someData[0]) 
        return this.value; 
       else if (this.value % 50 == 0) 
        return this.value; 
      } 
     } 
    }, 
    series: [{ 
     data: someData 
    }] 

}); 

enter image description here

+0

+1. Điều này là tốt hơn nhiều so với những gì tôi đã đưa ra - Tôi chỉ nói Highcharts rằng khi nhãn là "0", hiển thị "1" thay thế. Tôi sẽ cần phải thực hiện thêm một số xử lý trước dữ liệu để giải pháp của bạn hoạt động 100% với bộ dữ liệu của tôi, tức là, thiết lập khoảng thời gian đánh dấu thích hợp và xác định giá trị thấp nhất trong tập dữ liệu. Cảm ơn! –

+0

Ồ, tôi cũng có thể thực hiện một số xử lý bổ sung cho chỉ thiết lập tickInterval thành 1 khi Highcharts sẽ muốn đặt nhãn đầu tiên thành "0", trừ khi thực sự không có nhiều chi phí liên quan khi gọi 'nhãn. định dạng lên tới 500 lần. –

+0

Tính năng này không hoạt động nữa, với phiên bản 4. Tôi vẫn đang tìm kiếm giải pháp. – Syl

3

Một giải pháp (tối ưu hóa Marks answer) là sử dụng yAxis.labels.formatter với this.isFirstthis.axis.dataMin, như thế này:

yAxis:{ 
    labels: { 
     formatter: function() { 
      if(this.isFirst) 
       return this.axis.dataMin; 
      return this.value; 
     } 
    } 
} 

Xem this JSFiddle demo để biết ví dụ.

Lợi thế của việc này là bạn không phải đặt thủ công tickInterval, giúp tiết kiệm rất nhiều cuộc gọi đến formatter và cho phép Highcharts tìm ra các khoảng nhãn. Ngoài ra, nó sử dụng kiến ​​thức trục của giá trị dữ liệu tối thiểu, thay vì phải kiểm tra đối với mảng (bạn có thể phải lặp lại để tìm giá trị tối thiểu).

Hãy coi chừng rằng yAxis.min phải được đặt thành điều gì đó hợp lý ở đây (hoạt động tốt nhất với 0 và dữ liệu tích cực). Nếu trục y đi xa bên dưới điểm dữ liệu tối thiểu, nhãn đầu tiên sẽ không phải là một tại 0.

Giá trị this.axis không có sẵn khi câu hỏi này được hỏi.

Các vấn đề liên quan