選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 

926 行
31 KiB

  1. // https://d3js.org/d3-scale/ Version 1.0.7. Copyright 2017 Mike Bostock.
  2. (function (global, factory) {
  3. typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array'), require('d3-collection'), require('d3-interpolate'), require('d3-format'), require('d3-time'), require('d3-time-format'), require('d3-color')) :
  4. typeof define === 'function' && define.amd ? define(['exports', 'd3-array', 'd3-collection', 'd3-interpolate', 'd3-format', 'd3-time', 'd3-time-format', 'd3-color'], factory) :
  5. (factory((global.d3 = global.d3 || {}),global.d3,global.d3,global.d3,global.d3,global.d3,global.d3,global.d3));
  6. }(this, (function (exports,d3Array,d3Collection,d3Interpolate,d3Format,d3Time,d3TimeFormat,d3Color) { 'use strict';
  7. var array = Array.prototype;
  8. var map$1 = array.map;
  9. var slice = array.slice;
  10. var implicit = {name: "implicit"};
  11. function ordinal(range$$1) {
  12. var index = d3Collection.map(),
  13. domain = [],
  14. unknown = implicit;
  15. range$$1 = range$$1 == null ? [] : slice.call(range$$1);
  16. function scale(d) {
  17. var key = d + "", i = index.get(key);
  18. if (!i) {
  19. if (unknown !== implicit) return unknown;
  20. index.set(key, i = domain.push(d));
  21. }
  22. return range$$1[(i - 1) % range$$1.length];
  23. }
  24. scale.domain = function(_) {
  25. if (!arguments.length) return domain.slice();
  26. domain = [], index = d3Collection.map();
  27. var i = -1, n = _.length, d, key;
  28. while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));
  29. return scale;
  30. };
  31. scale.range = function(_) {
  32. return arguments.length ? (range$$1 = slice.call(_), scale) : range$$1.slice();
  33. };
  34. scale.unknown = function(_) {
  35. return arguments.length ? (unknown = _, scale) : unknown;
  36. };
  37. scale.copy = function() {
  38. return ordinal()
  39. .domain(domain)
  40. .range(range$$1)
  41. .unknown(unknown);
  42. };
  43. return scale;
  44. }
  45. function band() {
  46. var scale = ordinal().unknown(undefined),
  47. domain = scale.domain,
  48. ordinalRange = scale.range,
  49. range$$1 = [0, 1],
  50. step,
  51. bandwidth,
  52. round = false,
  53. paddingInner = 0,
  54. paddingOuter = 0,
  55. align = 0.5;
  56. delete scale.unknown;
  57. function rescale() {
  58. var n = domain().length,
  59. reverse = range$$1[1] < range$$1[0],
  60. start = range$$1[reverse - 0],
  61. stop = range$$1[1 - reverse];
  62. step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
  63. if (round) step = Math.floor(step);
  64. start += (stop - start - step * (n - paddingInner)) * align;
  65. bandwidth = step * (1 - paddingInner);
  66. if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
  67. var values = d3Array.range(n).map(function(i) { return start + step * i; });
  68. return ordinalRange(reverse ? values.reverse() : values);
  69. }
  70. scale.domain = function(_) {
  71. return arguments.length ? (domain(_), rescale()) : domain();
  72. };
  73. scale.range = function(_) {
  74. return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();
  75. };
  76. scale.rangeRound = function(_) {
  77. return range$$1 = [+_[0], +_[1]], round = true, rescale();
  78. };
  79. scale.bandwidth = function() {
  80. return bandwidth;
  81. };
  82. scale.step = function() {
  83. return step;
  84. };
  85. scale.round = function(_) {
  86. return arguments.length ? (round = !!_, rescale()) : round;
  87. };
  88. scale.padding = function(_) {
  89. return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
  90. };
  91. scale.paddingInner = function(_) {
  92. return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
  93. };
  94. scale.paddingOuter = function(_) {
  95. return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;
  96. };
  97. scale.align = function(_) {
  98. return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
  99. };
  100. scale.copy = function() {
  101. return band()
  102. .domain(domain())
  103. .range(range$$1)
  104. .round(round)
  105. .paddingInner(paddingInner)
  106. .paddingOuter(paddingOuter)
  107. .align(align);
  108. };
  109. return rescale();
  110. }
  111. function pointish(scale) {
  112. var copy = scale.copy;
  113. scale.padding = scale.paddingOuter;
  114. delete scale.paddingInner;
  115. delete scale.paddingOuter;
  116. scale.copy = function() {
  117. return pointish(copy());
  118. };
  119. return scale;
  120. }
  121. function point() {
  122. return pointish(band().paddingInner(1));
  123. }
  124. var constant = function(x) {
  125. return function() {
  126. return x;
  127. };
  128. };
  129. var number = function(x) {
  130. return +x;
  131. };
  132. var unit = [0, 1];
  133. function deinterpolateLinear(a, b) {
  134. return (b -= (a = +a))
  135. ? function(x) { return (x - a) / b; }
  136. : constant(b);
  137. }
  138. function deinterpolateClamp(deinterpolate) {
  139. return function(a, b) {
  140. var d = deinterpolate(a = +a, b = +b);
  141. return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };
  142. };
  143. }
  144. function reinterpolateClamp(reinterpolate) {
  145. return function(a, b) {
  146. var r = reinterpolate(a = +a, b = +b);
  147. return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
  148. };
  149. }
  150. function bimap(domain, range$$1, deinterpolate, reinterpolate) {
  151. var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1];
  152. if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
  153. else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
  154. return function(x) { return r0(d0(x)); };
  155. }
  156. function polymap(domain, range$$1, deinterpolate, reinterpolate) {
  157. var j = Math.min(domain.length, range$$1.length) - 1,
  158. d = new Array(j),
  159. r = new Array(j),
  160. i = -1;
  161. // Reverse descending domains.
  162. if (domain[j] < domain[0]) {
  163. domain = domain.slice().reverse();
  164. range$$1 = range$$1.slice().reverse();
  165. }
  166. while (++i < j) {
  167. d[i] = deinterpolate(domain[i], domain[i + 1]);
  168. r[i] = reinterpolate(range$$1[i], range$$1[i + 1]);
  169. }
  170. return function(x) {
  171. var i = d3Array.bisect(domain, x, 1, j) - 1;
  172. return r[i](d[i](x));
  173. };
  174. }
  175. function copy(source, target) {
  176. return target
  177. .domain(source.domain())
  178. .range(source.range())
  179. .interpolate(source.interpolate())
  180. .clamp(source.clamp());
  181. }
  182. // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
  183. // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
  184. function continuous(deinterpolate, reinterpolate) {
  185. var domain = unit,
  186. range$$1 = unit,
  187. interpolate$$1 = d3Interpolate.interpolate,
  188. clamp = false,
  189. piecewise,
  190. output,
  191. input;
  192. function rescale() {
  193. piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap;
  194. output = input = null;
  195. return scale;
  196. }
  197. function scale(x) {
  198. return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x);
  199. }
  200. scale.invert = function(y) {
  201. return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);
  202. };
  203. scale.domain = function(_) {
  204. return arguments.length ? (domain = map$1.call(_, number), rescale()) : domain.slice();
  205. };
  206. scale.range = function(_) {
  207. return arguments.length ? (range$$1 = slice.call(_), rescale()) : range$$1.slice();
  208. };
  209. scale.rangeRound = function(_) {
  210. return range$$1 = slice.call(_), interpolate$$1 = d3Interpolate.interpolateRound, rescale();
  211. };
  212. scale.clamp = function(_) {
  213. return arguments.length ? (clamp = !!_, rescale()) : clamp;
  214. };
  215. scale.interpolate = function(_) {
  216. return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;
  217. };
  218. return rescale();
  219. }
  220. var tickFormat = function(domain, count, specifier) {
  221. var start = domain[0],
  222. stop = domain[domain.length - 1],
  223. step = d3Array.tickStep(start, stop, count == null ? 10 : count),
  224. precision;
  225. specifier = d3Format.formatSpecifier(specifier == null ? ",f" : specifier);
  226. switch (specifier.type) {
  227. case "s": {
  228. var value = Math.max(Math.abs(start), Math.abs(stop));
  229. if (specifier.precision == null && !isNaN(precision = d3Format.precisionPrefix(step, value))) specifier.precision = precision;
  230. return d3Format.formatPrefix(specifier, value);
  231. }
  232. case "":
  233. case "e":
  234. case "g":
  235. case "p":
  236. case "r": {
  237. if (specifier.precision == null && !isNaN(precision = d3Format.precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
  238. break;
  239. }
  240. case "f":
  241. case "%": {
  242. if (specifier.precision == null && !isNaN(precision = d3Format.precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
  243. break;
  244. }
  245. }
  246. return d3Format.format(specifier);
  247. };
  248. function linearish(scale) {
  249. var domain = scale.domain;
  250. scale.ticks = function(count) {
  251. var d = domain();
  252. return d3Array.ticks(d[0], d[d.length - 1], count == null ? 10 : count);
  253. };
  254. scale.tickFormat = function(count, specifier) {
  255. return tickFormat(domain(), count, specifier);
  256. };
  257. scale.nice = function(count) {
  258. if (count == null) count = 10;
  259. var d = domain(),
  260. i0 = 0,
  261. i1 = d.length - 1,
  262. start = d[i0],
  263. stop = d[i1],
  264. step;
  265. if (stop < start) {
  266. step = start, start = stop, stop = step;
  267. step = i0, i0 = i1, i1 = step;
  268. }
  269. step = d3Array.tickIncrement(start, stop, count);
  270. if (step > 0) {
  271. start = Math.floor(start / step) * step;
  272. stop = Math.ceil(stop / step) * step;
  273. step = d3Array.tickIncrement(start, stop, count);
  274. } else if (step < 0) {
  275. start = Math.ceil(start * step) / step;
  276. stop = Math.floor(stop * step) / step;
  277. step = d3Array.tickIncrement(start, stop, count);
  278. }
  279. if (step > 0) {
  280. d[i0] = Math.floor(start / step) * step;
  281. d[i1] = Math.ceil(stop / step) * step;
  282. domain(d);
  283. } else if (step < 0) {
  284. d[i0] = Math.ceil(start * step) / step;
  285. d[i1] = Math.floor(stop * step) / step;
  286. domain(d);
  287. }
  288. return scale;
  289. };
  290. return scale;
  291. }
  292. function linear() {
  293. var scale = continuous(deinterpolateLinear, d3Interpolate.interpolateNumber);
  294. scale.copy = function() {
  295. return copy(scale, linear());
  296. };
  297. return linearish(scale);
  298. }
  299. function identity() {
  300. var domain = [0, 1];
  301. function scale(x) {
  302. return +x;
  303. }
  304. scale.invert = scale;
  305. scale.domain = scale.range = function(_) {
  306. return arguments.length ? (domain = map$1.call(_, number), scale) : domain.slice();
  307. };
  308. scale.copy = function() {
  309. return identity().domain(domain);
  310. };
  311. return linearish(scale);
  312. }
  313. var nice = function(domain, interval) {
  314. domain = domain.slice();
  315. var i0 = 0,
  316. i1 = domain.length - 1,
  317. x0 = domain[i0],
  318. x1 = domain[i1],
  319. t;
  320. if (x1 < x0) {
  321. t = i0, i0 = i1, i1 = t;
  322. t = x0, x0 = x1, x1 = t;
  323. }
  324. domain[i0] = interval.floor(x0);
  325. domain[i1] = interval.ceil(x1);
  326. return domain;
  327. };
  328. function deinterpolate(a, b) {
  329. return (b = Math.log(b / a))
  330. ? function(x) { return Math.log(x / a) / b; }
  331. : constant(b);
  332. }
  333. function reinterpolate(a, b) {
  334. return a < 0
  335. ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }
  336. : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };
  337. }
  338. function pow10(x) {
  339. return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
  340. }
  341. function powp(base) {
  342. return base === 10 ? pow10
  343. : base === Math.E ? Math.exp
  344. : function(x) { return Math.pow(base, x); };
  345. }
  346. function logp(base) {
  347. return base === Math.E ? Math.log
  348. : base === 10 && Math.log10
  349. || base === 2 && Math.log2
  350. || (base = Math.log(base), function(x) { return Math.log(x) / base; });
  351. }
  352. function reflect(f) {
  353. return function(x) {
  354. return -f(-x);
  355. };
  356. }
  357. function log() {
  358. var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),
  359. domain = scale.domain,
  360. base = 10,
  361. logs = logp(10),
  362. pows = powp(10);
  363. function rescale() {
  364. logs = logp(base), pows = powp(base);
  365. if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);
  366. return scale;
  367. }
  368. scale.base = function(_) {
  369. return arguments.length ? (base = +_, rescale()) : base;
  370. };
  371. scale.domain = function(_) {
  372. return arguments.length ? (domain(_), rescale()) : domain();
  373. };
  374. scale.ticks = function(count) {
  375. var d = domain(),
  376. u = d[0],
  377. v = d[d.length - 1],
  378. r;
  379. if (r = v < u) i = u, u = v, v = i;
  380. var i = logs(u),
  381. j = logs(v),
  382. p,
  383. k,
  384. t,
  385. n = count == null ? 10 : +count,
  386. z = [];
  387. if (!(base % 1) && j - i < n) {
  388. i = Math.round(i) - 1, j = Math.round(j) + 1;
  389. if (u > 0) for (; i < j; ++i) {
  390. for (k = 1, p = pows(i); k < base; ++k) {
  391. t = p * k;
  392. if (t < u) continue;
  393. if (t > v) break;
  394. z.push(t);
  395. }
  396. } else for (; i < j; ++i) {
  397. for (k = base - 1, p = pows(i); k >= 1; --k) {
  398. t = p * k;
  399. if (t < u) continue;
  400. if (t > v) break;
  401. z.push(t);
  402. }
  403. }
  404. } else {
  405. z = d3Array.ticks(i, j, Math.min(j - i, n)).map(pows);
  406. }
  407. return r ? z.reverse() : z;
  408. };
  409. scale.tickFormat = function(count, specifier) {
  410. if (specifier == null) specifier = base === 10 ? ".0e" : ",";
  411. if (typeof specifier !== "function") specifier = d3Format.format(specifier);
  412. if (count === Infinity) return specifier;
  413. if (count == null) count = 10;
  414. var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
  415. return function(d) {
  416. var i = d / pows(Math.round(logs(d)));
  417. if (i * base < base - 0.5) i *= base;
  418. return i <= k ? specifier(d) : "";
  419. };
  420. };
  421. scale.nice = function() {
  422. return domain(nice(domain(), {
  423. floor: function(x) { return pows(Math.floor(logs(x))); },
  424. ceil: function(x) { return pows(Math.ceil(logs(x))); }
  425. }));
  426. };
  427. scale.copy = function() {
  428. return copy(scale, log().base(base));
  429. };
  430. return scale;
  431. }
  432. function raise(x, exponent) {
  433. return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
  434. }
  435. function pow() {
  436. var exponent = 1,
  437. scale = continuous(deinterpolate, reinterpolate),
  438. domain = scale.domain;
  439. function deinterpolate(a, b) {
  440. return (b = raise(b, exponent) - (a = raise(a, exponent)))
  441. ? function(x) { return (raise(x, exponent) - a) / b; }
  442. : constant(b);
  443. }
  444. function reinterpolate(a, b) {
  445. b = raise(b, exponent) - (a = raise(a, exponent));
  446. return function(t) { return raise(a + b * t, 1 / exponent); };
  447. }
  448. scale.exponent = function(_) {
  449. return arguments.length ? (exponent = +_, domain(domain())) : exponent;
  450. };
  451. scale.copy = function() {
  452. return copy(scale, pow().exponent(exponent));
  453. };
  454. return linearish(scale);
  455. }
  456. function sqrt() {
  457. return pow().exponent(0.5);
  458. }
  459. function quantile$1() {
  460. var domain = [],
  461. range$$1 = [],
  462. thresholds = [];
  463. function rescale() {
  464. var i = 0, n = Math.max(1, range$$1.length);
  465. thresholds = new Array(n - 1);
  466. while (++i < n) thresholds[i - 1] = d3Array.quantile(domain, i / n);
  467. return scale;
  468. }
  469. function scale(x) {
  470. if (!isNaN(x = +x)) return range$$1[d3Array.bisect(thresholds, x)];
  471. }
  472. scale.invertExtent = function(y) {
  473. var i = range$$1.indexOf(y);
  474. return i < 0 ? [NaN, NaN] : [
  475. i > 0 ? thresholds[i - 1] : domain[0],
  476. i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
  477. ];
  478. };
  479. scale.domain = function(_) {
  480. if (!arguments.length) return domain.slice();
  481. domain = [];
  482. for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
  483. domain.sort(d3Array.ascending);
  484. return rescale();
  485. };
  486. scale.range = function(_) {
  487. return arguments.length ? (range$$1 = slice.call(_), rescale()) : range$$1.slice();
  488. };
  489. scale.quantiles = function() {
  490. return thresholds.slice();
  491. };
  492. scale.copy = function() {
  493. return quantile$1()
  494. .domain(domain)
  495. .range(range$$1);
  496. };
  497. return scale;
  498. }
  499. function quantize() {
  500. var x0 = 0,
  501. x1 = 1,
  502. n = 1,
  503. domain = [0.5],
  504. range$$1 = [0, 1];
  505. function scale(x) {
  506. if (x <= x) return range$$1[d3Array.bisect(domain, x, 0, n)];
  507. }
  508. function rescale() {
  509. var i = -1;
  510. domain = new Array(n);
  511. while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
  512. return scale;
  513. }
  514. scale.domain = function(_) {
  515. return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
  516. };
  517. scale.range = function(_) {
  518. return arguments.length ? (n = (range$$1 = slice.call(_)).length - 1, rescale()) : range$$1.slice();
  519. };
  520. scale.invertExtent = function(y) {
  521. var i = range$$1.indexOf(y);
  522. return i < 0 ? [NaN, NaN]
  523. : i < 1 ? [x0, domain[0]]
  524. : i >= n ? [domain[n - 1], x1]
  525. : [domain[i - 1], domain[i]];
  526. };
  527. scale.copy = function() {
  528. return quantize()
  529. .domain([x0, x1])
  530. .range(range$$1);
  531. };
  532. return linearish(scale);
  533. }
  534. function threshold() {
  535. var domain = [0.5],
  536. range$$1 = [0, 1],
  537. n = 1;
  538. function scale(x) {
  539. if (x <= x) return range$$1[d3Array.bisect(domain, x, 0, n)];
  540. }
  541. scale.domain = function(_) {
  542. return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice();
  543. };
  544. scale.range = function(_) {
  545. return arguments.length ? (range$$1 = slice.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice();
  546. };
  547. scale.invertExtent = function(y) {
  548. var i = range$$1.indexOf(y);
  549. return [domain[i - 1], domain[i]];
  550. };
  551. scale.copy = function() {
  552. return threshold()
  553. .domain(domain)
  554. .range(range$$1);
  555. };
  556. return scale;
  557. }
  558. var durationSecond = 1000;
  559. var durationMinute = durationSecond * 60;
  560. var durationHour = durationMinute * 60;
  561. var durationDay = durationHour * 24;
  562. var durationWeek = durationDay * 7;
  563. var durationMonth = durationDay * 30;
  564. var durationYear = durationDay * 365;
  565. function date(t) {
  566. return new Date(t);
  567. }
  568. function number$1(t) {
  569. return t instanceof Date ? +t : +new Date(+t);
  570. }
  571. function calendar(year, month, week, day, hour, minute, second, millisecond, format$$1) {
  572. var scale = continuous(deinterpolateLinear, d3Interpolate.interpolateNumber),
  573. invert = scale.invert,
  574. domain = scale.domain;
  575. var formatMillisecond = format$$1(".%L"),
  576. formatSecond = format$$1(":%S"),
  577. formatMinute = format$$1("%I:%M"),
  578. formatHour = format$$1("%I %p"),
  579. formatDay = format$$1("%a %d"),
  580. formatWeek = format$$1("%b %d"),
  581. formatMonth = format$$1("%B"),
  582. formatYear = format$$1("%Y");
  583. var tickIntervals = [
  584. [second, 1, durationSecond],
  585. [second, 5, 5 * durationSecond],
  586. [second, 15, 15 * durationSecond],
  587. [second, 30, 30 * durationSecond],
  588. [minute, 1, durationMinute],
  589. [minute, 5, 5 * durationMinute],
  590. [minute, 15, 15 * durationMinute],
  591. [minute, 30, 30 * durationMinute],
  592. [ hour, 1, durationHour ],
  593. [ hour, 3, 3 * durationHour ],
  594. [ hour, 6, 6 * durationHour ],
  595. [ hour, 12, 12 * durationHour ],
  596. [ day, 1, durationDay ],
  597. [ day, 2, 2 * durationDay ],
  598. [ week, 1, durationWeek ],
  599. [ month, 1, durationMonth ],
  600. [ month, 3, 3 * durationMonth ],
  601. [ year, 1, durationYear ]
  602. ];
  603. function tickFormat(date) {
  604. return (second(date) < date ? formatMillisecond
  605. : minute(date) < date ? formatSecond
  606. : hour(date) < date ? formatMinute
  607. : day(date) < date ? formatHour
  608. : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
  609. : year(date) < date ? formatMonth
  610. : formatYear)(date);
  611. }
  612. function tickInterval(interval, start, stop, step) {
  613. if (interval == null) interval = 10;
  614. // If a desired tick count is specified, pick a reasonable tick interval
  615. // based on the extent of the domain and a rough estimate of tick size.
  616. // Otherwise, assume interval is already a time interval and use it.
  617. if (typeof interval === "number") {
  618. var target = Math.abs(stop - start) / interval,
  619. i = d3Array.bisector(function(i) { return i[2]; }).right(tickIntervals, target);
  620. if (i === tickIntervals.length) {
  621. step = d3Array.tickStep(start / durationYear, stop / durationYear, interval);
  622. interval = year;
  623. } else if (i) {
  624. i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
  625. step = i[1];
  626. interval = i[0];
  627. } else {
  628. step = Math.max(d3Array.tickStep(start, stop, interval), 1);
  629. interval = millisecond;
  630. }
  631. }
  632. return step == null ? interval : interval.every(step);
  633. }
  634. scale.invert = function(y) {
  635. return new Date(invert(y));
  636. };
  637. scale.domain = function(_) {
  638. return arguments.length ? domain(map$1.call(_, number$1)) : domain().map(date);
  639. };
  640. scale.ticks = function(interval, step) {
  641. var d = domain(),
  642. t0 = d[0],
  643. t1 = d[d.length - 1],
  644. r = t1 < t0,
  645. t;
  646. if (r) t = t0, t0 = t1, t1 = t;
  647. t = tickInterval(interval, t0, t1, step);
  648. t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
  649. return r ? t.reverse() : t;
  650. };
  651. scale.tickFormat = function(count, specifier) {
  652. return specifier == null ? tickFormat : format$$1(specifier);
  653. };
  654. scale.nice = function(interval, step) {
  655. var d = domain();
  656. return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
  657. ? domain(nice(d, interval))
  658. : scale;
  659. };
  660. scale.copy = function() {
  661. return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format$$1));
  662. };
  663. return scale;
  664. }
  665. var time = function() {
  666. return calendar(d3Time.timeYear, d3Time.timeMonth, d3Time.timeWeek, d3Time.timeDay, d3Time.timeHour, d3Time.timeMinute, d3Time.timeSecond, d3Time.timeMillisecond, d3TimeFormat.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);
  667. };
  668. var utcTime = function() {
  669. return calendar(d3Time.utcYear, d3Time.utcMonth, d3Time.utcWeek, d3Time.utcDay, d3Time.utcHour, d3Time.utcMinute, d3Time.utcSecond, d3Time.utcMillisecond, d3TimeFormat.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);
  670. };
  671. var colors = function(s) {
  672. return s.match(/.{6}/g).map(function(x) {
  673. return "#" + x;
  674. });
  675. };
  676. var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
  677. var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6");
  678. var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9");
  679. var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5");
  680. var cubehelix$1 = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(300, 0.5, 0.0), d3Color.cubehelix(-240, 0.5, 1.0));
  681. var warm = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(-100, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8));
  682. var cool = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(260, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8));
  683. var rainbow = d3Color.cubehelix();
  684. var rainbow$1 = function(t) {
  685. if (t < 0 || t > 1) t -= Math.floor(t);
  686. var ts = Math.abs(t - 0.5);
  687. rainbow.h = 360 * t - 100;
  688. rainbow.s = 1.5 - 1.5 * ts;
  689. rainbow.l = 0.8 - 0.9 * ts;
  690. return rainbow + "";
  691. };
  692. function ramp(range$$1) {
  693. var n = range$$1.length;
  694. return function(t) {
  695. return range$$1[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
  696. };
  697. }
  698. var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
  699. var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
  700. var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
  701. var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
  702. function sequential(interpolator) {
  703. var x0 = 0,
  704. x1 = 1,
  705. clamp = false;
  706. function scale(x) {
  707. var t = (x - x0) / (x1 - x0);
  708. return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);
  709. }
  710. scale.domain = function(_) {
  711. return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];
  712. };
  713. scale.clamp = function(_) {
  714. return arguments.length ? (clamp = !!_, scale) : clamp;
  715. };
  716. scale.interpolator = function(_) {
  717. return arguments.length ? (interpolator = _, scale) : interpolator;
  718. };
  719. scale.copy = function() {
  720. return sequential(interpolator).domain([x0, x1]).clamp(clamp);
  721. };
  722. return linearish(scale);
  723. }
  724. exports.scaleBand = band;
  725. exports.scalePoint = point;
  726. exports.scaleIdentity = identity;
  727. exports.scaleLinear = linear;
  728. exports.scaleLog = log;
  729. exports.scaleOrdinal = ordinal;
  730. exports.scaleImplicit = implicit;
  731. exports.scalePow = pow;
  732. exports.scaleSqrt = sqrt;
  733. exports.scaleQuantile = quantile$1;
  734. exports.scaleQuantize = quantize;
  735. exports.scaleThreshold = threshold;
  736. exports.scaleTime = time;
  737. exports.scaleUtc = utcTime;
  738. exports.schemeCategory10 = category10;
  739. exports.schemeCategory20b = category20b;
  740. exports.schemeCategory20c = category20c;
  741. exports.schemeCategory20 = category20;
  742. exports.interpolateCubehelixDefault = cubehelix$1;
  743. exports.interpolateRainbow = rainbow$1;
  744. exports.interpolateWarm = warm;
  745. exports.interpolateCool = cool;
  746. exports.interpolateViridis = viridis;
  747. exports.interpolateMagma = magma;
  748. exports.interpolateInferno = inferno;
  749. exports.interpolatePlasma = plasma;
  750. exports.scaleSequential = sequential;
  751. Object.defineProperty(exports, '__esModule', { value: true });
  752. })));