Public
Edited
Sep 26, 2023
Insert cell
Insert cell
worksetids = ['64022a193000006a005ce2e2','63fff3ba250000a20afc54d4','64066e43300000f9035ce2e4','6409650730000004085ce312'];
Insert cell
response = fetch(`https://tools.htrc.illinois.edu/ef-api/worksets/${worksetids[0]}/metadata?fields=metadata.language`)
.then(response => response.json());
Insert cell
langs = getLang(response.data)
Insert cell
arcs = d3.pie().value((d) => d.count)(langs);
Insert cell
colors = d3.schemeCategory10;
Insert cell
{
const context = DOM.context2d(width, height),
canvas = context.canvas;
const radius = Math.min(width, height) / 2,
outerRadius = radius - 10;

const arc = d3
.arc()
.outerRadius(outerRadius)
.innerRadius(0)
.context(context);

context.translate(width / 2, height / 2);

arcs.forEach(function(d, i) {
context.beginPath();
arc(d);
context.fillStyle = colors[i];
context.fill();
});
return canvas;
}
Insert cell
function getLang(vols) {
var langs = {};
for (var vol in vols) {
if (vols[vol].metadata.language) {
if (Array.isArray(vols[vol].metadata.language)) {
for (var l in vols[vol].metadata.language) {
if (vols[vol].metadata.language[l] in langs) {
langs[vols[vol].metadata.language[l]] += 1;
}
else {
langs[vols[vol].metadata.language[l]] = 1;
}
}
}
else {
if (vols[vol].metadata.language in langs) {
langs[vols[vol].metadata.language] += 1;
}
else {
langs[vols[vol].metadata.language] = 1;
}
}
}
}

var output_langs = []
for (var lang in langs) {
output_langs.push({ lang: lang, count: langs[lang] });
}

return output_langs;
}
Insert cell
height = Math.min(width, 500)
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