MCPcopy
hub / github.com/microsoft/SandDance / loggish

Function loggish

docs/app/js/sanddance-app.js:128858–128919  ·  view source on GitHub ↗
(transform)

Source from the content-addressed store, hash-verified

128856 };
128857}
128858function loggish(transform) {
128859 var scale = transform(transformLog, transformExp), domain = scale.domain, base = 10, logs, pows;
128860 function rescale() {
128861 logs = logp(base), pows = powp(base);
128862 if (domain()[0] < 0) {
128863 logs = reflect(logs), pows = reflect(pows);
128864 transform(transformLogn, transformExpn);
128865 } else transform(transformLog, transformExp);
128866 return scale;
128867 }
128868 scale.base = function(_) {
128869 return arguments.length ? (base = +_, rescale()) : base;
128870 };
128871 scale.domain = function(_) {
128872 return arguments.length ? (domain(_), rescale()) : domain();
128873 };
128874 scale.ticks = function(count) {
128875 var d = domain(), u = d[0], v = d[d.length - 1], r;
128876 if (r = v < u) i = u, u = v, v = i;
128877 var i = logs(u), j = logs(v), p, k, t, n = count == null ? 10 : +count, z = [];
128878 if (!(base % 1) && j - i < n) {
128879 i = Math.floor(i), j = Math.ceil(j);
128880 if (u > 0) for(; i <= j; ++i)for(k = 1, p = pows(i); k < base; ++k){
128881 t = p * k;
128882 if (t < u) continue;
128883 if (t > v) break;
128884 z.push(t);
128885 }
128886 else for(; i <= j; ++i)for(k = base - 1, p = pows(i); k >= 1; --k){
128887 t = p * k;
128888 if (t < u) continue;
128889 if (t > v) break;
128890 z.push(t);
128891 }
128892 if (z.length * 2 < n) z = (0, _d3Array.ticks)(u, v, n);
128893 } else z = (0, _d3Array.ticks)(i, j, Math.min(j - i, n)).map(pows);
128894 return r ? z.reverse() : z;
128895 };
128896 scale.tickFormat = function(count, specifier) {
128897 if (specifier == null) specifier = base === 10 ? ".0e" : ",";
128898 if (typeof specifier !== "function") specifier = (0, _d3Format.format)(specifier);
128899 if (count === Infinity) return specifier;
128900 if (count == null) count = 10;
128901 var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
128902 return function(d) {
128903 var i = d / pows(Math.round(logs(d)));
128904 if (i * base < base - 0.5) i *= base;
128905 return i <= k ? specifier(d) : "";
128906 };
128907 };
128908 scale.nice = function() {
128909 return domain((0, _niceJsDefault.default)(domain(), {
128910 floor: function(x) {
128911 return pows(Math.floor(logs(x)));
128912 },
128913 ceil: function(x) {
128914 return pows(Math.ceil(logs(x)));
128915 }

Callers 1

logFunction · 0.70

Calls 5

transformFunction · 0.70
rescaleFunction · 0.70
domainFunction · 0.70
minMethod · 0.45
maxMethod · 0.45

Tested by

no test coverage detected