Plot.plot({
height: 600,
marginRight: 40,
x: {
label: "Median annual income (men, thousands) →",
transform: (d) => d / 1000
},
y: {
label: "↑ Median annual income (women, thousands)",
transform: (d) => d / 1000
},
color: { scheme: "rdylbu", domain: [2, 0.5], type: "log" },
marks: [
Plot.areaY(
d3.pairs(d3.range(0.55, 1 + 0.00001, step)).flatMap(([a, b]) => [
{ k: a, x: incdomain[0], y1: incdomain[0] * a, y2: incdomain[0] * b },
{ k: a, x: incdomain[1], y1: incdomain[1] * a, y2: incdomain[1] * b }
]),
{
z: "k",
fill: "k",
stroke: "k",
x: "x",
y1: "y1",
y2: "y2"
}
),
Plot.link([1], {
x1: incdomain[0],
y1: incdomain[0],
x2: incdomain[1],
y2: incdomain[1]
}),
Plot.link([0.6, 0.7, 0.8, 0.9], {
x1: incdomain[0],
y1: (k) => incdomain[0] * k,
x2: incdomain[1],
y2: (k) => incdomain[1] * k,
strokeOpacity: 0.2
}),
Plot.text([0.6, 0.7, 0.8, 0.9, 1.0], {
x: incdomain[1],
y: (k) => incdomain[1] * k,
text: (d) => (d === 1 ? "Equal" : d3.format("+.0%")(d - 1)),
textAnchor: "start",
dx: 6
}),
Plot.dot(income, { x: "m", y: "f", title: (d) => `${d.type}, ${d.age}` })
]
})