- var scale;
- if (maxV <= 0.0) {
- scale = 1.0;
- } else {
- scale = Math.pow( 10, Math.floor(Math.log(maxV)/Math.log(10.0)) );
- }
-
- // Add a smallish number of ticks at human-friendly points
- var nTicks = (maxV - minV) / scale;
- while (2 * nTicks < 20) {
- nTicks *= 2;
- }
- if ((maxV - minV) / nTicks < this.minTickSize_) {
- nTicks = this.round_((maxV - minV) / this.minTickSize_, 1);
+ // Basic idea:
+ // Try labels every 1, 2, 5, 10, 20, 50, 100, etc.
+ // Calculate the resulting tick spacing (i.e. this.height_ / nTicks).
+ // The first spacing greater than this.attrs_.pixelsPerYLabel is what we use.
+ var mults = [1, 2, 5];
+ var scale, low_val, high_val, nTicks;
+ for (var i = -10; i < 50; i++) {
+ var base_scale = Math.pow(10, i);
+ for (var j = 0; j < mults.length; j++) {
+ scale = base_scale * mults[j];
+ console.log("i/j/scale: " + i + "/" + j + "/" + scale);
+ low_val = Math.floor(minV / scale) * scale;
+ high_val = Math.ceil(maxV / scale) * scale;
+ nTicks = (high_val - low_val) / scale;
+ var spacing = this.height_ / nTicks;
+ // wish I could break out of both loops at once...
+ if (spacing > this.attrs_.pixelsPerYLabel) break;
+ }
+ if (spacing > this.attrs_.pixelsPerYLabel) break;