2013-07-19 43 views
2

使用flot charts我想指定最小的刻度顯示在y軸上。在我的情況下,我希望始終顯示至少10個刻度(值爲1-10),但是如果我的y軸最大值超過10,那麼我希望使用正常的刻度算法繪製圖表。我現在通過爲ticks參數指定一個函數來工作。Flot:顯示最小數量的刻度

ticks: function(axis){ 
      var ticks = []; 
      if(axis.max < 10){ 
       ticks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
      } 
      else{ 
      for(var i = 1; i < axis.max; i++){ 
       ticks.push(i); 
      } 
      } 
      return ticks; 
}, 

這樣做的問題是,我得到了很多更蜱比我要當axis.max大於10是否有辦法避免這種情況?

我原本以爲我可以返回null,但flot期待返回一個數組。 :(

+0

你已經解釋了什麼,這個功能是什麼是矛盾的。嘗試刪除'else'語句並將'if'條件更改爲小於或等於ie <=' – Alexander

+0

@Alexander如果刪除它,else語句將創建值爲「axis.max」的tick數組那麼我將只有刻度值1-10。這不是我想要的。我希望刻度值達到y軸最大值。我只是不希望他們的增量爲1.我希望flot使用其默認算法,如果可能的話。 –

+1

不,這是不正確的。如果刪除它,它將返回一個空數組。因此,「else」聲明即將出爐。去掉它。至於其餘的你需要動態地添加屬性,如果返回'null'沒有訣竅 – Alexander

回答

4

如果您希望tick生成的默認功能可以調用軸的tickGenerator函數。它比使用你不維護的代碼更清潔。所以在你的情況下,你可以這樣做:

ticks: function(axis){ 
    return axis.max < 10 ? [1,2,3,4,5,6,7,8,9,10] : axis.tickGenerator(axis); 
} 
+0

這正是我一直在尋找的!謝謝! –

+0

完美解決方案!謝謝 –

0

我發現this

ticks: 16 

,但我還沒有嘗試過

+0

感謝您的幫助,但沒有去那。如果我的axis.max小於10,它會向下舍入。 –

+0

所以當'max> 10'時使用它 –

1

似乎默認海軍報的算法是這樣說(見setupTickGeneration功能:

noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? canvasWidth : canvasHeight); 

所以也許像這樣的東西會在這裏工作(免責聲明 - 沒有真正測試過,不確定你是否有這個範圍內所有需要的變量,數學只是爲了繪製解決方案:

ticks: function(axis){ 
     var ticks = []; 
     if(axis.max < 10){ 
      ticks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
     } 
     else{ 

     noTicks = 0.3 * Math.sqrt(canvasHeight); 
     interval = Math.round(axis.max/noTicks); 
     for(var i = 1; i <= noTicks; i++){ 
      ticks.push(i * interval); 
     } 
     } 
     return ticks; 
}, 
+0

Duh對我而言非常棒,而且對你很棒! –

+0

謝謝:)其實你可能會檢查一下,如果在processOptions鉤子周圍寫一個插件將會是一個更清潔的選項 –