(linear, base, log, pow)
| 6484 | return d3_scale_log(d3.scale.linear().domain([ 0, Math.LN10 ]), 10, d3_scale_logp, d3_scale_powp); |
| 6485 | }; |
| 6486 | function d3_scale_log(linear, base, log, pow) { |
| 6487 | function scale(x) { |
| 6488 | return linear(log(x)); |
| 6489 | } |
| 6490 | scale.invert = function(x) { |
| 6491 | return pow(linear.invert(x)); |
| 6492 | }; |
| 6493 | scale.domain = function(x) { |
| 6494 | if (!arguments.length) return linear.domain().map(pow); |
| 6495 | if (x[0] < 0) log = d3_scale_logn, pow = d3_scale_pown; else log = d3_scale_logp, |
| 6496 | pow = d3_scale_powp; |
| 6497 | linear.domain(x.map(log)); |
| 6498 | return scale; |
| 6499 | }; |
| 6500 | scale.base = function(_) { |
| 6501 | if (!arguments.length) return base; |
| 6502 | base = +_; |
| 6503 | return scale; |
| 6504 | }; |
| 6505 | scale.nice = function() { |
| 6506 | linear.domain(d3_scale_nice(linear.domain(), d3_scale_logNice(base))); |
| 6507 | return scale; |
| 6508 | }; |
| 6509 | scale.ticks = function() { |
| 6510 | var extent = d3_scaleExtent(linear.domain()), ticks = []; |
| 6511 | if (extent.every(isFinite)) { |
| 6512 | var b = Math.log(base), i = Math.floor(extent[0] / b), j = Math.ceil(extent[1] / b), u = pow(extent[0]), v = pow(extent[1]), n = base % 1 ? 2 : base; |
| 6513 | if (log === d3_scale_logn) { |
| 6514 | ticks.push(-Math.pow(base, -i)); |
| 6515 | for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(-Math.pow(base, -i) * k); |
| 6516 | } else { |
| 6517 | for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(Math.pow(base, i) * k); |
| 6518 | ticks.push(Math.pow(base, i)); |
| 6519 | } |
| 6520 | for (i = 0; ticks[i] < u; i++) {} |
| 6521 | for (j = ticks.length; ticks[j - 1] > v; j--) {} |
| 6522 | ticks = ticks.slice(i, j); |
| 6523 | } |
| 6524 | return ticks; |
| 6525 | }; |
| 6526 | scale.tickFormat = function(n, format) { |
| 6527 | if (arguments.length < 2) format = d3_scale_logFormat; |
| 6528 | if (!arguments.length) return format; |
| 6529 | var b = Math.log(base), k = Math.max(.1, n / scale.ticks().length), f = log === d3_scale_logn ? (e = -1e-12, |
| 6530 | Math.floor) : (e = 1e-12, Math.ceil), e; |
| 6531 | return function(d) { |
| 6532 | return d / pow(b * f(log(d) / b + e)) <= k ? format(d) : ""; |
| 6533 | }; |
| 6534 | }; |
| 6535 | scale.copy = function() { |
| 6536 | return d3_scale_log(linear.copy(), base, log, pow); |
| 6537 | }; |
| 6538 | return d3_scale_linearRebind(scale, linear); |
| 6539 | } |
| 6540 | var d3_scale_logFormat = d3.format(".0e"); |
| 6541 | function d3_scale_logp(x) { |
| 6542 | return Math.log(x < 0 ? 0 : x); |
no test coverage detected