vis2 = Plot.plot({
style: { fontSize: 14 },
width: width > 650 ? 700 : 350,
height: width > 650 ? 1100 : 950,
marginTop: 70,
y: { grid: true },
marginLeft: width > 650 ? 311 : 10,
marks: [
Plot.ruleX([new Date("2025-01-24")], { strokeDasharray: "2 2", dy: -20 }),
Plot.link(data, {
x1: "date_start",
x2: "date_end",
y: "Навзва проекту",
opacity: 0.7,
tip: width > 650 ? true : true,
title: (d) => `Проєкт: ${d["Навзва проекту"]}\nСума: $${d.bud} млн`,
stroke: "#dd1c77",
strokeWidth: (d) => d.amount / 1150,
sort: { y: "-x1" }
}),
Plot.text(
data.filter((d) => d.bud > 50),
{
textAnchor: "end",
lineWidth: 12,
fontSize: 11,
fontWeight: 300,
x: (d) =>
d["Навзва проекту"] !=
"Децентралізація приносить кращі результати та ефективність (DOBRE)" &&
d["Навзва проекту"] !=
`Програма сприяння громадській активності "Долучайся!"`
? d.date_start
: width > 650
? new Date("2027-06-01")
: new Date("2027-09-01"),
y: "Навзва проекту",
dx: -3,
stroke: "white",
fill: "#000",
text: (d) => "$" + d.bud + " млн"
}
),
Plot.arrow([0], {
x1: new Date("2020-04-01"),
x2: new Date("2023-05-15"),
y1: "Демократичне врядування у Східній Україні",
y2: "Трансформація комунікацій"
}),
Plot.text(["Рішення про призупинення фінансування\n↓"], {
frameAnchor: "top",
lineWidth: 14,
x: new Date("2025-01-24"),
dy: -60,
stroke: "white",
strokeWidth: 4,
fill: "#000",
fontWeight: 600
}),
Plot.text(["↑\nНовіші проекти\nза датою початку"], {
frameAnchor: "top",
lineWidth: 14,
fontWeight: 600,
x: new Date("2017-05-24"),
dy: -65,
dx: width > 650 ? -140 : 0,
stroke: "white",
opacity: width > 650 ? 1 : 0,
strokeWidth: 4,
fill: "#000"
}),
Plot.text(
[
`Проєкт SPARC на $439 млн продовжує попередній проєкт "Енергетична безпека" (див. графіки внизу). За ці гроші, зокрема, ремонтують пошкоджену росіянами енергетичну інфраструктуру і виконують оголошений минулого року Зеленським плану розпобудови 1 ГВт маневрової газової генерації.`
],
{
frameAnchor: width > 650 ? "top-left" : "top-left",
lineWidth: width > 650 ? 12 : 11,
fontSize: 14,
lineHeight: 1.2,
x: width > 650 ? new Date("2016-09-01") : new Date("2016-05-01"),
dy: width > 650 ? 20 : 25,
dx: -5,
stroke: "white",
strokeWidth: 4,
fill: "#000"
}
),
Plot.text([width > 650 ? `→` : `→`], {
frameAnchor: "top-right",
fontSize: 16,
fontWeight: 300,
x: new Date("2022-05-01"),
dy: width > 650 ? 73 : 55,
dx: width > 650 ? 0 : -5,
stroke: "white",
strokeWidth: 4,
fill: "#000"
}),
Plot.axisX({ frameAnchor: "top", inset: 20, ticks: 6 }),
Plot.axisY({
lineWidth: 28,
fontSize: 12,
tickSize: 0,
opacity: width > 650 ? 1 : 0,
label: null,
fontWeight: 300,
lineHeight: 0.9
})
],
caption: html`<small style='color:grey;text-align: start;'>Наведіть, щоб побачити деталі ${iconHandTap}.<br>
Джерело: Кабінет міністрів</small>`
})