2011-11-18 63 views
8

我有基於時間的數據,範圍從1到500.時間在x軸上繪製,值在y軸上。如何在Highcharts中爲軸設置靜態最小值

當最小和最大數據點之間的範圍是很大的y軸開始標識爲0。我可以告訴Highcharts不設置yAxis.startOnTick = false;要顯示標籤。但是這是不是真的我後。

Here is a jsfiddle您不能分辨第一個點是0還是其他某個值的問題。在這裏有0也看起來像y的最小範圍是 0,而不是1.

Can Highcharts可以顯示第一個標籤,第一個標籤應始終設置爲數據集中的最小值(相對於其軸)。

回答

9

我很驚訝這是多麼困難。不是最佳解決方案,但與HighChart的API最好I can dream up

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。這比我想出的要好得多 - 我只是告訴Highcharts,當標籤爲「0」時,顯示「1」。我需要對數據做一些額外的預處理,以使您的解決方案能夠與my數據集一起工作100%,即設置適當的滴答間隔並確定數據集中的最低值。謝謝! –

+0

哦,當Highcharts想要將第一個標籤設置爲「0」時,我也可能會做一些額外的處理,只將tickInterval設置爲1,除非調用'標籤時確實沒有太多額外開銷。格式化程序「最多500次。 –

+0

這不適用,版本4.我仍然在尋找解決方案。 – Syl

3

溶液(即優化Marks answer)是使用yAxis.labels.formatterthis.isFirstthis.axis.dataMin,像這樣:

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

查看this JSFiddle demo舉例。

這樣做的好處是您不必手動設置tickInterval,這樣可以節省很多打電話給formatter並讓Highcharts自己找出標籤間隔。此外,它使用最小數據值的軸知識,而不必檢查數組(您可能必須迭代以查找最小值)。

請注意,yAxis.min必須設置爲合理的(在0和正數據下最好)。如果y軸遠遠低於最小數據點,則第一個標籤不會是0處的那個。

當提出此問題時,this.axis值不可用。

相關問題