{
let numOfLayers = 20;
let maxPop = 40000000;
let perLayerRange = maxPop / numOfLayers;
let layers = [];
let templateLayer = {
width: 300,
height: 50,
mark: { type: "area", line: true, clip: true, orient: "vertical" },
transform: [
{
calculate: "datum.pop - 50",
as: "popShifted"
}
],
encoding: {
x: {
field: "year",
type: "temporal",
scale: {
zero: false,
nice: false
},
axis: {
ticks: false,
title: null,
}
},
y: {
field: "popShifted", type: "quantitative",
scale: { domain: [0, 1000000] }
},
opacity: { value: .1 }
}
};
for (let i = 0; i < numOfLayers; i++) {
let newLayer = JSON.parse(JSON.stringify(templateLayer));
newLayer.encoding.y.scale.domain[0] = 0;
newLayer.encoding.y.scale.domain[1] = perLayerRange;
newLayer.transform[0].calculate = "datum.pop - " + perLayerRange * i;
layers.push(newLayer);
}
return VegaLite({
data: { values: population },
facet: {
row: {
field: "state",
type: "nominal",
}
},
spec: {
layer: layers
}
})
}