|
1 | | -d3 = {version: "0.28.3"}; // semver |
| 1 | +d3 = {version: "0.28.4"}; // semver |
2 | 2 | if (!Date.now) Date.now = function() { |
3 | 3 | return +new Date(); |
4 | 4 | }; |
@@ -1915,6 +1915,50 @@ var d3_category20c = [ |
1915 | 1915 | "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb", |
1916 | 1916 | "#636363", "#969696", "#bdbdbd", "#d9d9d9" |
1917 | 1917 | ]; |
| 1918 | +d3.scale.quantile = function() { |
| 1919 | + var domain = [], |
| 1920 | + range = [], |
| 1921 | + thresholds = []; |
| 1922 | + |
| 1923 | + function rescale() { |
| 1924 | + var i = -1, |
| 1925 | + n = thresholds.length = range.length, |
| 1926 | + k = domain.length / n; |
| 1927 | + while (++i < n) thresholds[i] = domain[~~(i * k)]; |
| 1928 | + } |
| 1929 | + |
| 1930 | + function quantile(value) { |
| 1931 | + if (isNaN(value = +value)) return NaN; |
| 1932 | + var low = 0, high = thresholds.length - 1; |
| 1933 | + while (low <= high) { |
| 1934 | + var mid = (low + high) >> 1, midValue = thresholds[mid]; |
| 1935 | + if (midValue < value) low = mid + 1; |
| 1936 | + else if (midValue > value) high = mid - 1; |
| 1937 | + else return mid; |
| 1938 | + } |
| 1939 | + return high < 0 ? 0 : high; |
| 1940 | + } |
| 1941 | + |
| 1942 | + function scale(x) { |
| 1943 | + return range[quantile(x)]; |
| 1944 | + } |
| 1945 | + |
| 1946 | + scale.domain = function(x) { |
| 1947 | + if (!arguments.length) return domain; |
| 1948 | + domain = x.slice().sort(d3.ascending); |
| 1949 | + rescale(); |
| 1950 | + return scale; |
| 1951 | + }; |
| 1952 | + |
| 1953 | + scale.range = function(x) { |
| 1954 | + if (!arguments.length) return range; |
| 1955 | + range = x; |
| 1956 | + rescale(); |
| 1957 | + return scale; |
| 1958 | + }; |
| 1959 | + |
| 1960 | + return scale; |
| 1961 | +}; |
1918 | 1962 | d3.svg = {}; |
1919 | 1963 | d3["svg"]["arc"] = function() { |
1920 | 1964 | var innerRadius = d3_svg_arcInnerRadius, |
|
0 commit comments