// JS const d3 = require('d3'); const Datamap = require('datamaps'); // CSS require('./world_map.css'); function worldMapChart(slice, payload) { const container = slice.container; const div = d3.select(slice.selector); container.css('height', slice.height()); div.selectAll('*').remove(); const fd = slice.formData; // Ignore XXX's to get better normalization let data = payload.data.filter(d => (d.country && d.country !== 'XXX')); const ext = d3.extent(data, function (d) { return d.m1; }); const extRadius = d3.extent(data, function (d) { return d.m2; }); const radiusScale = d3.scale.linear() .domain([extRadius[0], extRadius[1]]) .range([1, fd.max_bubble_size]); const colorScale = d3.scale.linear() .domain([ext[0], ext[1]]) .range(['#FFF', 'black']); data = data.map(d => Object.assign({}, d, { radius: radiusScale(d.m2), fillColor: colorScale(d.m1), })); const mapData = {}; data.forEach((d) => { mapData[d.country] = d; }); const f = d3.format('.3s'); container.show(); const map = new Datamap({ element: slice.container.get(0), data, fills: { defaultFill: '#ddd', }, geographyConfig: { popupOnHover: true, highlightOnHover: true, borderWidth: 1, borderColor: '#fff', highlightBorderColor: '#fff', highlightFillColor: '#005a63', highlightBorderWidth: 1, popupTemplate: (geo, d) => ( `