source: Dev/branches/jQueryUI/client/d3/src/scale/log.js @ 249

Last change on this file since 249 was 249, checked in by hendrikvanantwerpen, 13 years ago

This one's for Subversion, because it's so close...

First widget (stripped down sequencer).
Seperated client and server code in two direcotry trees.

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.