Spaces:
Runtime error
Runtime error
import * as Plot from "npm:@observablehq/plot"; | |
export function languageChart( | |
languageData, | |
{ width, height, scoreKey, scoreName } = {} | |
) { | |
// Format captions | |
const formatScore = (score) => | |
score > 0 ? score.toFixed(2) : "No benchmark available!"; | |
const formatTitle = (d) => | |
d.language_name + | |
"\n" + | |
parseInt(d.speakers / 1_000_00) / 10 + | |
"M speakers\n" + | |
scoreName + | |
": " + | |
formatScore(d[scoreKey]); | |
return Plot.plot({ | |
width: width, | |
height: height, | |
marginBottom: 100, | |
x: { label: "Number of speakers", axis: null }, | |
y: { label: `${scoreName} (average across models)` }, | |
// color: { scheme: "BrBG" }, | |
marks: [ | |
Plot.rectY( | |
languageData, | |
Plot.stackX({ | |
x: "speakers", | |
order: scoreKey, | |
reverse: true, | |
y2: scoreKey, // y2 to avoid stacking by y | |
title: formatTitle, | |
tip: true, | |
fill: (d) => (d[scoreKey] > 0 ? "black" : "pink"), | |
}) | |
), | |
Plot.rectY( | |
languageData, | |
Plot.pointerX( | |
Plot.stackX({ | |
x: "speakers", | |
order: scoreKey, | |
reverse: true, | |
y2: scoreKey, // y2 to avoid stacking by y | |
fill: "grey", | |
}) | |
) | |
), | |
Plot.text( | |
languageData, | |
Plot.stackX({ | |
x: "speakers", | |
y2: scoreKey, | |
order: scoreKey, | |
reverse: true, | |
text: "language_name", | |
frameAnchor: "bottom", | |
textAnchor: "end", | |
dy: 10, | |
rotate: 270, | |
opacity: (d) => (d.speakers > 50_000_000 ? 1 : 0), | |
}) | |
), | |
], | |
}); | |
} | |