function by_area(area) {
const data1 = data.filter((d) => d.area2 == area);
const max_y = d3.max(
data.filter((d) => d.area2 == area),
(d) => d.diff
);
console.log(isFinite(max_y));
let r23 = d3.sum(data1, (d) => d.r23);
let r24 = d3.sum(data1, (d) => d.r24);
let change = (((r24 - r23) / r23) * 100).toFixed(1);
let dy = yy ? { domain: [-50, 300] } : null;
return Plot.plot({
style: { fontSize: 13, fontWeight: 400 },
marginLeft: 45,
marginBottom: 40,
marginTop: 40,
marginRight: 40,
width: 350,
height: 300,
x: {
label: "Сумарна виручка сектору",
tickFormat: (d) => d / 1000000 + " млрд",
nice: true,
labelArrow: null
},
y: {
grid: true,
tickFormat: (d) => d + "%",
label: "Зміна виручки\nв 2024 році",
labelArrow: null
},
marks: [
Plot.text(["↑ Зміни виручки\n→Розмір компанії"], {
frameAnchor: "top-right",
fontWeight: 300,
dy: 20,
fill: "grey",
stroke: "#fff"
}),
Plot.text([area], {
frameAnchor: "top",
fontWeight: 700,
dy: -30,
fontSize: 15
}),
Plot.text([change], {
frameAnchor: "top",
fontWeight: 300,
dy: -15,
fontSize: 14,
text: (d) => "Середнє зростання: " + d + "%"
}),
Plot.rectY(
data1,
Plot.stackX({
fill: (d) =>
d.name.toLowerCase().includes(text.toLowerCase())
? "orange"
: "#72AADF",
x: "r24",
order: "diff",
reverse: true,
y2: (d) => d.diff,
insetLeft: 0.2,
insetRight: 0.2,
opacity: 0.8
})
),
Plot.rectY(
data1,
Plot.pointer(
Plot.stackX({
x: "r24",
order: "diff",
reverse: true,
y2: (d) => d.diff,
insetLeft: 0.2,
insetRight: 0.2,
fill: null,
stroke: "orange",
strokeWidth: 2
})
)
),
Plot.ruleY([0]),
Plot.tip(
data1,
Plot.stackX(
Plot.pointerX({
x: "r24",
y1: 0,
y2: "diff",
stroke: "#aaa",
tip: "xy",
title: (d) =>
`${d.name}\n${(d.r24 / 1000000).toFixed(
1
)} млрд грн (${d.diff.toFixed(1)}%)`
})
)
)
]
});
}