Rev | Line | |
---|
[76] | 1 | d3.scale.quantile = function() { |
---|
| 2 | var domain = [], |
---|
| 3 | range = [], |
---|
| 4 | thresholds = []; |
---|
| 5 | |
---|
| 6 | function rescale() { |
---|
| 7 | var k = 0, |
---|
| 8 | n = domain.length, |
---|
| 9 | q = range.length; |
---|
| 10 | thresholds.length = Math.max(0, q - 1); |
---|
| 11 | while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); |
---|
| 12 | } |
---|
| 13 | |
---|
| 14 | function scale(x) { |
---|
| 15 | if (isNaN(x = +x)) return NaN; |
---|
| 16 | return range[d3.bisect(thresholds, x)]; |
---|
| 17 | } |
---|
| 18 | |
---|
| 19 | scale.domain = function(x) { |
---|
| 20 | if (!arguments.length) return domain; |
---|
| 21 | domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending); |
---|
| 22 | rescale(); |
---|
| 23 | return scale; |
---|
| 24 | }; |
---|
| 25 | |
---|
| 26 | scale.range = function(x) { |
---|
| 27 | if (!arguments.length) return range; |
---|
| 28 | range = x; |
---|
| 29 | rescale(); |
---|
| 30 | return scale; |
---|
| 31 | }; |
---|
| 32 | |
---|
| 33 | scale.quantiles = function() { |
---|
| 34 | return thresholds; |
---|
| 35 | }; |
---|
| 36 | |
---|
| 37 | return scale; |
---|
| 38 | }; |
---|
Note: See
TracBrowser
for help on using the repository browser.