X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;ds=sidebyside;f=dygraph-tickers.js;h=80eb291c9235872da1ff45232d1c15207415af17;hb=e664574785f3b5a3c7cfc86be46263eb438cbc5b;hp=457d23c25b13e9673c5c8fa880e74ccd8723ea0f;hpb=fa0d7ad80802e2b31d9889936eb6ffd55dab1f43;p=dygraphs.git diff --git a/dygraph-tickers.js b/dygraph-tickers.js index 457d23c..80eb291 100644 --- a/dygraph-tickers.js +++ b/dygraph-tickers.js @@ -157,17 +157,31 @@ Dygraph.numericTicks = function(a, b, pixels, opts, dygraph, vals) { var kmg2 = opts("labelsKMG2"); var mults, base; if (kmg2) { - mults = [1, 2, 4, 8, 16]; + mults = [1, 2, 4, 8, 16, 32, 64, 128, 256]; base = 16; } else { - mults = [1, 2, 5, 10]; + mults = [1, 2, 5, 10, 20, 50, 100]; base = 10; } - var wanted_ticks = pixels / pixels_per_tick; - var units_per_tick = Math.abs(b - a) / wanted_ticks; + // Get the maximum number of permitted ticks based on the + // graph's pixel size and pixels_per_tick setting. + var max_ticks = Math.ceil(pixels / pixels_per_tick); + + // Now calculate the data unit equivalent of this tick spacing. + // Use abs() since graphs may have a reversed Y axis. + var units_per_tick = Math.abs(b - a) / max_ticks; + + // Based on this, get a starting scale which is the largest + // integer power of the chosen base (10 or 16) that still remains + // below the requested pixels_per_tick spacing. var base_power = Math.floor(Math.log(units_per_tick) / Math.log(base)); var base_scale = Math.pow(base, base_power); + + // Now try multiples of the starting scale until we find one + // that results in tick marks spaced sufficiently far apart. + // The "mults" array should cover the range 1 .. base^2 to + // adjust for rounding and edge effects. var scale, low_val, high_val, nTicks, spacing; for (j = 0; j < mults.length; j++) { scale = base_scale * mults[j];