UNPKG

sg-heatmap

Version:

Open-source all-in-one Swiss Army knife tool for creating Choropleth maps

234 lines (186 loc) 6.22 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); exports.default = getColorScale; exports.optimizePointSpread = optimizePointSpread; exports.BuGn = BuGn; exports.BuPu = BuPu; exports.GnBu = GnBu; exports.OrRd = OrRd; exports.PuBu = PuBu; exports.PuBuGn = PuBuGn; exports.PuRd = PuRd; exports.RdPu = RdPu; exports.YlGn = YlGn; exports.YlGnBu = YlGnBu; exports.YlOrBr = YlOrBr; exports.YlOrRd = YlOrRd; exports.Blues = Blues; exports.Greens = Greens; exports.Greys = Greys; exports.Oranges = Oranges; exports.Purples = Purples; exports.Reds = Reds; exports.BrBG = BrBG; exports.PiYG = PiYG; exports.PRGn = PRGn; exports.PuOr = PuOr; exports.RdBu = RdBu; exports.RdGy = RdGy; exports.RdYlBu = RdYlBu; exports.RdYlGn = RdYlGn; exports.Spectral = Spectral; var _chromaJs = require('chroma-js'); var _chromaJs2 = _interopRequireDefault(_chromaJs); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getColorScale(colorArray) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; Object.assign({ bezierInterpolate: false, correctLightness: true, interpolationMode: 'lab' }, options); var scale = options.bezierInterpolate ? _chromaJs2.default.bezier(colorArray).scale() : _chromaJs2.default.scale(colorArray).mode(options.interpolationMode); if (options.correctLightness) scale = scale.correctLightness(); return function (value) { return scale(value).css(); }; } function optimizePointSpread(stat, options) { options = Object.assign({ epsilon: 0.000001, gamma: 0.3, maxIteration: 300 }, options); var values = stat.values, min = stat.min, max = stat.max; var domain = options.domain || [min, max]; var v = Object.keys(values).map(function (key) { return (values[key] - domain[0]) / (domain[1] - domain[0]); }); v.sort(function (a, b) { return a - b; }); var k = 1; var kHistory = []; var scoreHistory = []; var _loop = function _loop() { var vk = v.map(function (item) { return Math.pow(item, k); }); var lnV = v.map(function (item) { return item ? Math.log(item) : 0; }); var deltaVk = []; var deltalnVvk = []; for (var i = 1; i < v.length; i++) { deltaVk.push(vk[i] - vk[i - 1]); deltalnVvk.push(lnV[i] * vk[i] - lnV[i - 1] * vk[i - 1]); } var beta = deltaVk.reduce(function (sum, dVk, i) { return sum + 2 * dVk * deltalnVvk[i]; }, 0); var score = deltaVk.reduce(function (sum, dVn) { return sum + Math.pow(dVn, 2); }, 0); kHistory.push(k); scoreHistory.push(score); k = Math.exp(Math.log(k) - options.gamma * beta * k); if (scoreHistory.length >= 2) { var _scoreHistory$slice = scoreHistory.slice(-2), _scoreHistory$slice2 = _slicedToArray(_scoreHistory$slice, 2), prevScore = _scoreHistory$slice2[0], lastScore = _scoreHistory$slice2[1]; if (Math.abs(lastScore - prevScore) < options.epsilon) return 'break'; } }; while (kHistory.length < options.maxIteration) { var _ret = _loop(); if (_ret === 'break') break; } return { domain: domain, transform: k, kHistory: kHistory, scoreHistory: scoreHistory }; } function BuGn() { return getColorScale('BuGn', { correctLightness: false }); } function BuPu() { return getColorScale('BuPu', { correctLightness: false }); } function GnBu() { return getColorScale('GnBu', { correctLightness: false }); } function OrRd() { return getColorScale('OrRd', { correctLightness: false }); } function PuBu() { return getColorScale('PuBu', { correctLightness: false }); } function PuBuGn() { return getColorScale('PuBuGn', { correctLightness: false }); } function PuRd() { return getColorScale('PuRd', { correctLightness: false }); } function RdPu() { return getColorScale('RdPu', { correctLightness: false }); } function YlGn() { return getColorScale('YlGn', { correctLightness: false }); } function YlGnBu() { return getColorScale('YlGnBu', { correctLightness: false }); } function YlOrBr() { return getColorScale('YlOrBr', { correctLightness: false }); } function YlOrRd() { return getColorScale('YlOrRd', { correctLightness: false }); } function Blues() { return getColorScale('Blues', { correctLightness: false }); } function Greens() { return getColorScale('Greens', { correctLightness: false }); } function Greys() { return getColorScale('Greys', { correctLightness: false }); } function Oranges() { return getColorScale('Oranges', { correctLightness: false }); } function Purples() { return getColorScale('Purples', { correctLightness: false }); } function Reds() { return getColorScale('Reds', { correctLightness: false }); } function BrBG() { return getColorScale('BrBG', { correctLightness: false }); } function PiYG() { return getColorScale('PiYG', { correctLightness: false }); } function PRGn() { return getColorScale('PRGn', { correctLightness: false }); } function PuOr() { return getColorScale('PuOr', { correctLightness: false }); } function RdBu() { return getColorScale('RdBu', { correctLightness: false }); } function RdGy() { return getColorScale('RdGy', { correctLightness: false }); } function RdYlBu() { return getColorScale('RdYlBu', { correctLightness: false }); } function RdYlGn() { return getColorScale('RdYlGn', { correctLightness: false }); } function Spectral() { return getColorScale('Spectral', { correctLightness: false }); }