2017-07-19 83 views
2

任何人都可以告訴我Chart.js 2.6+用於計算條形圖中Y軸的數學邏輯嗎?我創建了一個分頁功能,允許我瀏覽一個有大量列的條形圖。除非我需要Y軸保持不變,因爲圖表的數據集發生了變化,所以它工作得很好。Chart.js - 它如何計算條形圖上的Y軸?

爲此,我獲取圖表的數據並創建它的一個子集,例如前20條記錄,並將其作爲數據對象提供給圖表。爲了使Y軸固定不變,我將整個數據集中的最大值作爲yAxes對象在ticks中的max值,如下圖所示。

yAxes: [{ 
    ticks: { 
      max:value_i_determine_here 
    } 
}] 

這並不工作,但不完全是因爲chart.js之有時會過於緊密創建步驟一起產生的圖表,看起來像下面的1英寸

enter image description here

正如你所看到的,頂值是1,900,000,因爲我提供的是作爲最大值。不過,我需要提供最大值作爲我確定Chart.js確定應使用的步驟的值。

所以我的問題是,Chart.js如何計算在Y軸上使用的值?如果我知道這個邏輯,那麼我使用該邏輯根據我的完整數據集獲得最大值,並將THAT值作爲最大值。

+0

它看起來像是需要200K的一步,但它仍然代表最大yAxis值。如果最大值是180,001,我想它會更糟。 – lilezek

回答

0

我最終做的是寫一個函數,它將在我的完整數據集中取最大值,並將其除以我提供給Y軸maxTicksLimit屬性的值。然後我通過複雜的if/else運行這個值,如果條件看起來像下面這樣。

然後我使用返回的結果作爲step並將其作爲Y軸stepSize屬性提供給圖表。看起來工作很好。如果任何人有更好的解決方案請讓我知道,因爲這是基於我的硬編碼計算,我寧願更動態的方法。

var determineStepSize = function(maxDatasetValue) { 
    var maxStepTemp = Math.ceil(maxDatasetValue/maxYAxisTicks); 
    // Determine what the step should be based on the maxStepTemp value 
    if (maxStepTemp > 4000000) step = 8000000; 
    else if (maxStepTemp > 2000000) step = 4000000; 
    else if (maxStepTemp > 1000000) step = 2000000; 
    else if (maxStepTemp > 500000) step = 1000000; 
    else if (maxStepTemp > 250000) step = 500000; 
    else if (maxStepTemp > 100000) step = 200000;   
    else if (maxStepTemp > 50000) step = 100000; 
    else if (maxStepTemp > 25000) step = 50000; 
    else if (maxStepTemp > 10000) step = 20000; 
    else if (maxStepTemp > 5000) step = 10000; 
    else if (maxStepTemp > 2500) step = 5000; 
    else if (maxStepTemp > 1000) step = 2000; 
    else if (maxStepTemp > 500) step = 1000; 
    else step = 500;     
    return step; 
};