sg-heatmap
Version:
Open-source all-in-one Swiss Army knife tool for creating Choropleth maps
234 lines (186 loc) • 6.22 kB
JavaScript
;
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 });
}