source: Dev/branches/rest-dojo-ui/Demo/d3/src/scale/log.js @ 312

Last change on this file since 312 was 312, checked in by jkraaijeveld, 13 years ago
File size: 1.7 KB
Line 
1d3.scale.log = function() {
2  var linear = d3.scale.linear(),
3      log = d3_scale_log,
4      pow = log.pow;
5
6  function scale(x) {
7    return linear(log(x));
8  }
9
10  scale.invert = function(x) {
11    return pow(linear.invert(x));
12  };
13
14  scale.domain = function(x) {
15    if (!arguments.length) return linear.domain().map(pow);
16    log = x[0] < 0 ? d3_scale_logn : d3_scale_log;
17    pow = log.pow;
18    linear.domain(x.map(log));
19    return scale;
20  };
21
22  scale.nice = function() {
23    linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault));
24    return scale;
25  };
26
27  scale.ticks = function() {
28    var extent = d3_scaleExtent(linear.domain()),
29        ticks = [];
30    if (extent.every(isFinite)) {
31      var i = Math.floor(extent[0]),
32          j = Math.ceil(extent[1]),
33          u = pow(extent[0]),
34          v = pow(extent[1]);
35      if (log === d3_scale_logn) {
36        ticks.push(pow(i));
37        for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k);
38      } else {
39        for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k);
40        ticks.push(pow(i));
41      }
42      for (i = 0; ticks[i] < u; i++) {} // strip small values
43      for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values
44      ticks = ticks.slice(i, j);
45    }
46    return ticks;
47  };
48
49  scale.tickFormat = function() {
50    return d3_scale_logTickFormat;
51  };
52
53  return d3_scale_linearRebind(scale, linear);
54};
55
56function d3_scale_log(x) {
57  return Math.log(x) / Math.LN10;
58}
59
60function d3_scale_logn(x) {
61  return -Math.log(-x) / Math.LN10;
62}
63
64d3_scale_log.pow = function(x) {
65  return Math.pow(10, x);
66};
67
68d3_scale_logn.pow = function(x) {
69  return -Math.pow(10, -x);
70};
71
72function d3_scale_logTickFormat(d) {
73  return d.toPrecision(1);
74}
Note: See TracBrowser for help on using the repository browser.