threescatter = Plot.plot((() => {
const n = 1;
const keys = Array.from(d3.union(epi_plus_three.map((d) => d.measurement)));
const index = new Map(keys.map((key, i) => [key, i]));
const fx = (key) => index.get(key) % n;
const fy = (key) => Math.floor(index.get(key) / n);
return {
title: "Relationship by Region",
subtitle: "EPI and Policy Objective Scores",
grid: true,
height: 1200,
x: {nice: true}, y: {nice: true},
fy: {padding: 0.2, axis: null},
fx: {padding: 0.09, axis: null},
marks:[
Plot.frame(),
Plot.dot(epi_plus_three, {
x: "epi",
y: "measure",
fill: "#808080",
r: 1.5,
fx: (d) => fx(d.measurement),
fy: (d) => fy(d.measurement),
channels: {country: "country", region: "region", measurement:"measurement"},
tip: false
}),
Plot.dot(epi_plus_three_iso_region, {
x: "epi",
y: "measure",
stroke: "measurement",
r: 5,
fx: (d) => fx(d.measurement),
fy: (d) => fy(d.measurement),
channels: {country: "country", region: "region", measurement:"measurement"},
tip: {
format: {
country: true,
region: true,
stroke: false,
measurement: false,
x: true,
y: true,
fx: false,
fy: false
}
}
}),,
Plot.dot(epi_plus_three_iso, {
x: "epi",
y: "measure",
fill: "green",
stroke: "green",
fx: (d) => fx(d.measurement),
fy: (d) => fy(d.measurement),
r: 6,
symbol: "star",
legend: true,
channels: {country: "country", region: "region", measurement:"measurement"},
tip: false
}),
Plot.axisX({anchor: "bottom", facetAnchor: null, nice: true, label: "EPI Score" }),
Plot.axisY({label: "Policy Objective Score"}),
Plot.text(keys, {fx, fy, frameAnchor: "top-right", dy: -16, fontSize: 16}),
]
};
})())