Published
Edited
Aug 30, 2020
Insert cell
md`# Endemic Flowering Plants of Sri Lanka`
Insert cell
{
const data = (await getData()).filter(
datum =>
datum.iucn_redlist_code === 'CR' ||
datum.iucn_redlist_code === 'EN' ||
datum.iucn_redlist_code === 'VU'
);

const regionIDToCount = data.reduce(function(regionIDToCount, datum) {
return datum.district_list.reduce(function(regionIDToCount, district) {
if (!regionIDToCount[district]) {
regionIDToCount[district] = 0;
}
regionIDToCount[district] += 1;
return regionIDToCount;
}, regionIDToCount);
}, {});

const maxValue = sum(Object.values(regionIDToCount));
const maxValueRadius = 64;

return drawRegionDorlingCartogram('LK', REGION_TYPE.DISTRICT, {
width: 700,
height: 1000,
caption: `"Critially Endangered, Endangered, or Vulnerable Endemic Flowering Plants, by District `,
fRegionIDToRadius: regionID =>
maxValueRadius * Math.sqrt(regionIDToCount[regionID] / maxValue),
fAppendLabel: (regionID, svg, x, y) => null,
hue: 120,
fRegionIDToColor: regionID => 'hsla(0, 100%, 50%, 1)',
fAppendLabel: function(regionID, svg, x, y) {
const fontSize = regionIDToCount[regionID] / 3;
drawText(svg, x, y, regionIDToCount[regionID], fontSize / 2);
},
fAppendLegend: svg => null
});
}
Insert cell
Insert cell
d3 = require('d3@5')
Insert cell
import { sum } from '@nuuuwan/list-utils'
Insert cell
import { drawText } from '@nuuuwan/svg-utils'
Insert cell
import {
REGION_TYPE,
drawRegionDorlingCartogram
} from '@nuuuwan/sri-lanka-regions'
Insert cell
import { REDLIST_CATEGORY_MAP } from '@nuuuwan/iucn-red-list'
Insert cell
md`---`
Insert cell
async function getData() {
return await d3.json(
'https://raw.githubusercontent.com/nuuuwan/misc-sl-data/master/biology.flowering_plants_of_sri_lanka.json'
);
}
Insert cell
Insert cell
async function getIUCNRedlistData() {
const data = await getData();
return data.reduce(function(rData, datum) {
let x = datum.iucn_redlist_code;
if (x === 'None') {
x = 'NE';
}
if (x.indexOf('LR') !== -1) {
x = 'NE';
}

const y = datum.in_sinharaja;
if (!rData[x]) {
rData[x] = {};
}
if (!rData[x][y]) {
rData[x][y] = 0;
}
rData[x][y] += 1;
return rData;
}, {});
}
Insert cell
getIUCNRedlistData()
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more