{
var arr = [];
arr.push(
Plot.dot(data, {
x: "flipper_length_mm",
y: "body_mass_g",
fill: "sex",
clip: true,
tip: { lineHeight: 1.3, maxRadius: 5 }
}),
Plot.density(data, {
x: "flipper_length_mm",
y: "body_mass_g",
stroke: "sex",
thresholds: 10,
clip: true
})
);
const div = d3.create("div");
const plotDiv = div.append("div");
const plot = (xDomain, yDomain) =>
Plot.plot({
x: { domain: xDomain },
y: { domain: yDomain },
inset: 10,
grid: true,
color: { legend: true },
marks: arr
});
function insertPlot(xDomain = [150, 250], yDomain = [2000, 6500]) {
console.log(1)
const chart = plot(xDomain, yDomain);
plotDiv.html("").append(() => chart);
return [chart.scale("x"), chart.scale("y")];
}
const [xScale, yScale] = insertPlot();
const l = d3.scaleLinear();
function scaledDomain({ k, x }) {
l.domain(xScale.domain).range(xScale.range);
return [
l.invert((xScale.range[0] - x) / k),
l.invert((xScale.range[1] - x) / k)
];
}
function scaledDomainy({ k, y }) {
l.domain(yScale.domain).range(yScale.range);
return [
l.invert((yScale.range[0] - y) / k),
l.invert((yScale.range[1] - y) / k)
];
}
const zoom = d3
.zoom()
.on("zoom", ({ transform }) => insertPlot(scaledDomain(transform),scaledDomainy(transform)));
div.call(zoom);
return div.node();
}