(linear, log)
| 2754 | }; |
| 2755 | |
| 2756 | function d3_scale_log(linear, log) { |
| 2757 | var pow = log.pow; |
| 2758 | |
| 2759 | function scale(x) { |
| 2760 | return linear(log(x)); |
| 2761 | } |
| 2762 | |
| 2763 | scale.invert = function(x) { |
| 2764 | return pow(linear.invert(x)); |
| 2765 | }; |
| 2766 | |
| 2767 | scale.domain = function(x) { |
| 2768 | if (!arguments.length) return linear.domain().map(pow); |
| 2769 | log = x[0] < 0 ? d3_scale_logn : d3_scale_logp; |
| 2770 | pow = log.pow; |
| 2771 | linear.domain(x.map(log)); |
| 2772 | return scale; |
| 2773 | }; |
| 2774 | |
| 2775 | scale.nice = function() { |
| 2776 | linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault)); |
| 2777 | return scale; |
| 2778 | }; |
| 2779 | |
| 2780 | scale.ticks = function() { |
| 2781 | var extent = d3_scaleExtent(linear.domain()), |
| 2782 | ticks = []; |
| 2783 | if (extent.every(isFinite)) { |
| 2784 | var i = Math.floor(extent[0]), |
| 2785 | j = Math.ceil(extent[1]), |
| 2786 | u = pow(extent[0]), |
| 2787 | v = pow(extent[1]); |
| 2788 | if (log === d3_scale_logn) { |
| 2789 | ticks.push(pow(i)); |
| 2790 | for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k); |
| 2791 | } else { |
| 2792 | for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k); |
| 2793 | ticks.push(pow(i)); |
| 2794 | } |
| 2795 | for (i = 0; ticks[i] < u; i++) {} // strip small values |
| 2796 | for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values |
| 2797 | ticks = ticks.slice(i, j); |
| 2798 | } |
| 2799 | return ticks; |
| 2800 | }; |
| 2801 | |
| 2802 | scale.tickFormat = function(n, format) { |
| 2803 | if (arguments.length < 2) format = d3_scale_logFormat; |
| 2804 | if (arguments.length < 1) return format; |
| 2805 | var k = n / scale.ticks().length, |
| 2806 | f = log === d3_scale_logn ? (e = -1e-12, Math.floor) : (e = 1e-12, Math.ceil), |
| 2807 | e; |
| 2808 | return function(d) { |
| 2809 | return d / pow(f(log(d) + e)) < k ? format(d) : ""; |
| 2810 | }; |
| 2811 | }; |
| 2812 | |
| 2813 | scale.copy = function() { |
no test coverage detected