<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Silnice v číslech</title><link>https://silnicevcislech.cz/tags/vize-nula/</link><description/><generator>Hugo 0.139.3</generator><language>cs</language><managingEditor>Eduard Šubert</managingEditor><lastBuildDate>Sat, 23 May 2026 12:58:28 +0100</lastBuildDate><atom:link href="https://silnicevcislech.cz/tags/vize-nula/feed.xml" rel="self" type="application/rss+xml"/><item><title>Hodnocení Vize nula v České republice za rok 2025</title><link>https://silnicevcislech.cz/posts/vize-nula-hodnoceni/2025/</link><pubDate>Sat, 23 May 2026 12:58:28 +0100</pubDate><guid>https://silnicevcislech.cz/posts/vize-nula-hodnoceni/2025/</guid><description><![CDATA[
<script src="https://d3js.org/d3.v7.js"></script>
<script>
    const progressData = {
        'deaths': [
            { 'year': 2016, 'count': 545 },
            { 'year': 2017, 'count': 502 },
            { 'year': 2018, 'count': 565 },
            { 'year': 2019, 'count': 547 },
            { 'year': 2020, 'count': 460 },
            { 'year': 2021, 'count': 470 },
            { 'year': 2022, 'count': 452 },
            { 'year': 2023, 'count': 455 },
            { 'year': 2024, 'count': 438 },
            { 'year': 2025, 'count': 421 }
        ],
        'severe_injuries': [
            { 'year': 2016, 'count': 2580 },
            { 'year': 2017, 'count': 2340 },
            { 'year': 2018, 'count': 2465 },
            { 'year': 2019, 'count': 2110 },
            { 'year': 2020, 'count': 1807 },
            { 'year': 2021, 'count': 1624 },
            { 'year': 2022, 'count': 1718 },
            { 'year': 2023, 'count': 1751 },
            { 'year': 2024, 'count': 1609 },
            { 'year': 2025, 'count': 1647 }
        ]
    }

    // brewer_lakota: [, , "#931e18", "#da7901", "#247d3f", "#20235b"],
    const progressColors = {
        deaths: "#04a3bd",
        severe_injuries: "#f0be3d",
    }

    function drawProgressChart(data, elementId, color) {
        d3.select(`#${elementId} .chart > *`).remove();

        const width = parseInt(d3.select(`#${elementId} .chart`).style("width"));
        const verticalScreen = (window.screen.width < window.screen.height);

        const height = verticalScreen ? width : Number(width * 1 / 2);
        // Specify the chart’s dimensions.
        const marginTop = verticalScreen ? 30 : 20;
        const marginRight = 10;
        const marginBottom = verticalScreen ? 40 : 20;
        const marginLeft = 50;

        const fontSize = verticalScreen ? "10px" : "14px";

        // Declare the x (horizontal position) scale.
        const x = d3.scaleBand()
            .domain(data.map(d => d.year)) // descending frequency
            .range([marginLeft, width - marginRight])
            .padding(verticalScreen ? 0.2 : 0.3);

        // Declare the y (vertical position) scale.
        const y = d3.scaleLinear()
            .domain([0, d3.max(data, (d) => d.count)])
            .range([height - marginBottom, marginTop]);

        // Create the SVG container.
        const svg = d3.select(`#${elementId} .chart`)
            .attr("style", `height: ${height}px;`)
            .append("svg")
            .attr("width", width)
            .attr("height", height)
            .attr("viewBox", [0, 0, width, height])
            .attr("style", "max-width: 100%; height: auto;");

        // Add a rect for each bar.
        svg.append("g")
            .attr("fill", "steelblue")
            .selectAll()
            .data(data)
            .join("rect")
            .attr("x", (d) => x(d.year))
            .attr("y", (d) => y(d.count))
            .attr("height", (d) => y(0) - y(d.count))
            .attr("width", x.bandwidth())
            .attr("fill", color)
            .attr("rx", 3) // Rounded corners
            .append("title")
            .text((d, i) => {
                return `Rok: ${d.year} \nPočet: ${d.count}`;
            });

        // Add text labels on top of bars
        if (verticalScreen) {
            svg.append("g")
                .selectAll()
                .data(data)
                .join("text")
                .attr("x", d => x(d.year))
                .attr("y", d => y(d.count))
                .attr("font-size", fontSize)
                .attr("transform", d => `translate(${x.bandwidth() / 2},-5)rotate(-45 ${x(d.year)} ${y(d.count)})`)
                .style("text-anchor", "start")
                .text(d => d.count);
        } else {
            svg.append("g")
                .selectAll()
                .data(data)
                .join("text")
                .attr("x", d => x(d.year) + x.bandwidth() / 2)
                .attr("y", d => y(d.count) - 5)  // 5px above the bar
                .attr("text-anchor", "middle")
                .attr("font-size", fontSize)
                .text(d => d.count);
        }

        // Add the x-axis and label.
        if (verticalScreen) {
            svg.append("g")
                .attr("transform", `translate(0,${height - marginBottom})`)
                .call(d3.axisBottom(x).tickSizeOuter(0))
                .call(g => g.select(".domain").remove())
                .call(g => {
                    g.selectAll(".tick text")
                        .attr("transform", `translate(${x.bandwidth() / 2},0)rotate(45)`)
                        .attr("text-anchor", "start")
                        .attr("font-size", fontSize);
                    g.select(".domain").remove();
                });
        } else {
            svg.append("g")
                .attr("transform", `translate(0,${height - marginBottom})`)
                .call(d3.axisBottom(x).tickSizeOuter(0))
                .attr("font-size", fontSize);
        }

        // Add the y-axis and label, and remove the domain line.
        svg.append("g")
            .attr("transform", `translate(${marginLeft},0)`)
            .call(d3.axisLeft(y).tickFormat((y) => y.toFixed()))
            .attr("font-size", fontSize)
            .call(g => g.select(".domain").remove())
            .call(g => g.append("text")
                .attr("x", -marginLeft)
                .attr("y", 10)
                .attr("fill", "currentColor")
                .attr("text-anchor", "start")
                .text("↑ Počet"));
    }
</script>

<script>
    const areaData = {
        'deaths': [
            { 'area': 'Středočeský kraj', 'count': 77 },
            { 'area': 'Jihočeský kraj', 'count': 42 },
            { 'area': 'Jihomoravský kraj', 'count': 38 },
            { 'area': 'Plzeňský kraj', 'count': 35 },
            { 'area': 'Pardubický kraj', 'count': 30 },
            { 'area': 'Ústecký kraj', 'count': 29 },
            { 'area': 'Zlínský kraj', 'count': 28 },
            { 'area': 'Moravskoslezský kraj', 'count': 27 },
            { 'area': 'Kraj Vysočina', 'count': 24 },
            { 'area': 'Olomoucký kraj', 'count': 23 },
            { 'area': 'Královéhradecký kraj', 'count': 20 },
            { 'area': 'Liberecký kraj', 'count': 20 },
            { 'area': 'Hlavní město Praha', 'count': 15 },
            { 'area': 'Karlovarský kraj', 'count': 13 }],
        'severe_injuries': [
            { 'area': 'Středočeský kraj', 'count': 295 },
            { 'area': 'Jihočeský kraj', 'count': 195 },
            { 'area': 'Jihomoravský kraj', 'count': 176 },
            { 'area': 'Plzeňský kraj', 'count': 83 },
            { 'area': 'Pardubický kraj', 'count': 69 },
            { 'area': 'Ústecký kraj', 'count': 137 },
            { 'area': 'Zlínský kraj', 'count': 78 },
            { 'area': 'Moravskoslezský kraj', 'count': 117 },
            { 'area': 'Kraj Vysočina', 'count': 65 },
            { 'area': 'Olomoucký kraj', 'count': 75 },
            { 'area': 'Královéhradecký kraj', 'count': 106 },
            { 'area': 'Liberecký kraj', 'count': 29 },
            { 'area': 'Hlavní město Praha', 'count': 167 },
            { 'area': 'Karlovarský kraj', 'count': 55 }]
    }

    function drawAreaChart(data, elementId, color) {
        d3.select(`#${elementId} .chart > *`).remove();

        const width = parseInt(d3.select(`#${elementId} .chart`).style("width"));
        const verticalScreen = (window.screen.width < window.screen.height);

        const height = verticalScreen ? width : Number(width * 1 / 2);
        // Specify the chart’s dimensions.
        const marginTop = verticalScreen ? 30 : 20;
        const marginRight = 50;
        const marginBottom = 130;
        const marginLeft = 50;

        const fontSize = verticalScreen ? "10px" : "14px";

        // Declare the x (horizontal position) scale.
        const x = d3.scaleBand()
            .domain(data.map(d => d.area)) // descending frequency
            .range([marginLeft, width - marginRight])
            .padding(verticalScreen ? 0.2 : 0.3);

        // Declare the y (vertical position) scale.
        const y = d3.scaleLinear()
            .domain([0, d3.max(data, (d) => d.count)])
            .range([height - marginBottom, marginTop]);

        // Create the SVG container.
        const svg = d3.select(`#${elementId} .chart`)
            .attr("style", `height: ${height}px;`)
            .append("svg")
            .attr("width", width)
            .attr("height", height)
            .attr("viewBox", [0, 0, width, height])
            .attr("style", "max-width: 100%; height: auto;");

        // Add a rect for each bar.
        svg.append("g")
            .selectAll()
            .data(data)
            .join("rect")
            .attr("x", (d) => x(d.area))
            .attr("y", (d) => y(d.count))
            .attr("height", (d) => y(0) - y(d.count))
            .attr("width", x.bandwidth())
            .attr("fill", color)
            .attr("rx", 3) // Rounded corners
            .append("title")
            .text((d, i) => {
                return `Kraj: ${d.area} \nPočet: ${d.count}`;
            });

        // Add text labels on top of bars
        if (verticalScreen) {
            svg.append("g")
                .selectAll()
                .data(data)
                .join("text")
                .attr("x", d => x(d.area))
                .attr("y", d => y(d.count))
                .attr("font-size", fontSize)
                .attr("transform", d => `translate(${x.bandwidth() / 2},-5)rotate(-45 ${x(d.area)} ${y(d.count)})`)
                .style("text-anchor", "start")
                .text(d => d.count);
        } else {
            svg.append("g")
                .selectAll()
                .data(data)
                .join("text")
                .attr("x", d => x(d.area) + x.bandwidth() / 2)
                .attr("y", d => y(d.count) - 5)  // 5px above the bar
                .attr("text-anchor", "middle")
                .attr("font-size", fontSize)
                .text(d => d.count);
        }

        // Add the x-axis and label.
        svg.append("g")
            .attr("transform", `translate(0,${height - marginBottom})`)
            .call(d3.axisBottom(x).tickSizeOuter(0))
            .call(g => g.select(".domain").remove())
            .call(g => {
                g.selectAll(".tick text")
                    .attr("transform", `translate(${x.bandwidth() / (verticalScreen ? 2 : 4)},${verticalScreen ? 0 : 5})rotate(45)`)
                    .attr("text-anchor", "start")
                    .attr("font-size", fontSize);
                g.select(".domain").remove();
            });


        // Add the y-axis and label, and remove the domain line.
        svg.append("g")
            .attr("transform", `translate(${marginLeft},0)`)
            .call(d3.axisLeft(y).tickFormat((y) => y.toFixed()))
            .attr("font-size", fontSize)
            .call(g => g.select(".domain").remove())
            .call(g => g.append("text")
                .attr("x", -marginLeft)
                .attr("y", 10)
                .attr("fill", "currentColor")
                .attr("text-anchor", "start")
                .text("↑ Počet"));
    }
</script>

<script>
    const areaMonthData = {
        'deaths': [{ 'area': 'Hlavní město Praha', 'month': 1, 'count': 1 },
        { 'area': 'Středočeský kraj', 'month': 1, 'count': 7 },
        { 'area': 'Jihočeský kraj', 'month': 1, 'count': 6 },
        { 'area': 'Plzeňský kraj', 'month': 1, 'count': 1 },
        { 'area': 'Ústecký kraj', 'month': 1, 'count': 1 },
        { 'area': 'Královéhradecký kraj', 'month': 1, 'count': 1 },
        { 'area': 'Jihomoravský kraj', 'month': 1, 'count': 0 },
        { 'area': 'Moravskoslezský kraj', 'month': 1, 'count': 1 },
        { 'area': 'Olomoucký kraj', 'month': 1, 'count': 4 },
        { 'area': 'Zlínský kraj', 'month': 1, 'count': 2 },
        { 'area': 'Kraj Vysočina', 'month': 1, 'count': 1 },
        { 'area': 'Pardubický kraj', 'month': 1, 'count': 2 },
        { 'area': 'Liberecký kraj', 'month': 1, 'count': 1 },
        { 'area': 'Karlovarský kraj', 'month': 1, 'count': 0 },
        { 'area': 'Hlavní město Praha', 'month': 2, 'count': 1 },
        { 'area': 'Středočeský kraj', 'month': 2, 'count': 3 },
        { 'area': 'Jihočeský kraj', 'month': 2, 'count': 3 },
        { 'area': 'Plzeňský kraj', 'month': 2, 'count': 5 },
        { 'area': 'Ústecký kraj', 'month': 2, 'count': 1 },
        { 'area': 'Královéhradecký kraj', 'month': 2, 'count': 0 },
        { 'area': 'Jihomoravský kraj', 'month': 2, 'count': 2 },
        { 'area': 'Moravskoslezský kraj', 'month': 2, 'count': 6 },
        { 'area': 'Olomoucký kraj', 'month': 2, 'count': 2 },
        { 'area': 'Zlínský kraj', 'month': 2, 'count': 1 },
        { 'area': 'Kraj Vysočina', 'month': 2, 'count': 1 },
        { 'area': 'Pardubický kraj', 'month': 2, 'count': 0 },
        { 'area': 'Liberecký kraj', 'month': 2, 'count': 0 },
        { 'area': 'Karlovarský kraj', 'month': 2, 'count': 1 },
        { 'area': 'Hlavní město Praha', 'month': 3, 'count': 0 },
        { 'area': 'Středočeský kraj', 'month': 3, 'count': 5 },
        { 'area': 'Jihočeský kraj', 'month': 3, 'count': 4 },
        { 'area': 'Plzeňský kraj', 'month': 3, 'count': 1 },
        { 'area': 'Ústecký kraj', 'month': 3, 'count': 3 },
        { 'area': 'Královéhradecký kraj', 'month': 3, 'count': 0 },
        { 'area': 'Jihomoravský kraj', 'month': 3, 'count': 2 },
        { 'area': 'Moravskoslezský kraj', 'month': 3, 'count': 0 },
        { 'area': 'Olomoucký kraj', 'month': 3, 'count': 0 },
        { 'area': 'Zlínský kraj', 'month': 3, 'count': 1 },
        { 'area': 'Kraj Vysočina', 'month': 3, 'count': 1 },
        { 'area': 'Pardubický kraj', 'month': 3, 'count': 1 },
        { 'area': 'Liberecký kraj', 'month': 3, 'count': 1 },
        { 'area': 'Karlovarský kraj', 'month': 3, 'count': 0 },
        { 'area': 'Hlavní město Praha', 'month': 4, 'count': 4 },
        { 'area': 'Středočeský kraj', 'month': 4, 'count': 7 },
        { 'area': 'Jihočeský kraj', 'month': 4, 'count': 3 },
        { 'area': 'Plzeňský kraj', 'month': 4, 'count': 1 },
        { 'area': 'Ústecký kraj', 'month': 4, 'count': 1 },
        { 'area': 'Královéhradecký kraj', 'month': 4, 'count': 3 },
        { 'area': 'Jihomoravský kraj', 'month': 4, 'count': 6 },
        { 'area': 'Moravskoslezský kraj', 'month': 4, 'count': 3 },
        { 'area': 'Olomoucký kraj', 'month': 4, 'count': 0 },
        { 'area': 'Zlínský kraj', 'month': 4, 'count': 1 },
        { 'area': 'Kraj Vysočina', 'month': 4, 'count': 2 },
        { 'area': 'Pardubický kraj', 'month': 4, 'count': 2 },
        { 'area': 'Liberecký kraj', 'month': 4, 'count': 1 },
        { 'area': 'Karlovarský kraj', 'month': 4, 'count': 4 },
        { 'area': 'Hlavní město Praha', 'month': 5, 'count': 1 },
        { 'area': 'Středočeský kraj', 'month': 5, 'count': 4 },
        { 'area': 'Jihočeský kraj', 'month': 5, 'count': 1 },
        { 'area': 'Plzeňský kraj', 'month': 5, 'count': 3 },
        { 'area': 'Ústecký kraj', 'month': 5, 'count': 0 },
        { 'area': 'Královéhradecký kraj', 'month': 5, 'count': 1 },
        { 'area': 'Jihomoravský kraj', 'month': 5, 'count': 2 },
        { 'area': 'Moravskoslezský kraj', 'month': 5, 'count': 0 },
        { 'area': 'Olomoucký kraj', 'month': 5, 'count': 1 },
        { 'area': 'Zlínský kraj', 'month': 5, 'count': 0 },
        { 'area': 'Kraj Vysočina', 'month': 5, 'count': 2 },
        { 'area': 'Pardubický kraj', 'month': 5, 'count': 3 },
        { 'area': 'Liberecký kraj', 'month': 5, 'count': 1 },
        { 'area': 'Karlovarský kraj', 'month': 5, 'count': 1 },
        { 'area': 'Hlavní město Praha', 'month': 6, 'count': 2 },
        { 'area': 'Středočeský kraj', 'month': 6, 'count': 10 },
        { 'area': 'Jihočeský kraj', 'month': 6, 'count': 2 },
        { 'area': 'Plzeňský kraj', 'month': 6, 'count': 8 },
        { 'area': 'Ústecký kraj', 'month': 6, 'count': 4 },
        { 'area': 'Královéhradecký kraj', 'month': 6, 'count': 5 },
        { 'area': 'Jihomoravský kraj', 'month': 6, 'count': 2 },
        { 'area': 'Moravskoslezský kraj', 'month': 6, 'count': 1 },
        { 'area': 'Olomoucký kraj', 'month': 6, 'count': 4 },
        { 'area': 'Zlínský kraj', 'month': 6, 'count': 3 },
        { 'area': 'Kraj Vysočina', 'month': 6, 'count': 1 },
        { 'area': 'Pardubický kraj', 'month': 6, 'count': 3 },
        { 'area': 'Liberecký kraj', 'month': 6, 'count': 1 },
        { 'area': 'Karlovarský kraj', 'month': 6, 'count': 0 },
        { 'area': 'Hlavní město Praha', 'month': 7, 'count': 0 },
        { 'area': 'Středočeský kraj', 'month': 7, 'count': 9 },
        { 'area': 'Jihočeský kraj', 'month': 7, 'count': 4 },
        { 'area': 'Plzeňský kraj', 'month': 7, 'count': 0 },
        { 'area': 'Ústecký kraj', 'month': 7, 'count': 1 },
        { 'area': 'Královéhradecký kraj', 'month': 7, 'count': 0 },
        { 'area': 'Jihomoravský kraj', 'month': 7, 'count': 3 },
        { 'area': 'Moravskoslezský kraj', 'month': 7, 'count': 1 },
        { 'area': 'Olomoucký kraj', 'month': 7, 'count': 2 },
        { 'area': 'Zlínský kraj', 'month': 7, 'count': 3 },
        { 'area': 'Kraj Vysočina', 'month': 7, 'count': 2 },
        { 'area': 'Pardubický kraj', 'month': 7, 'count': 6 },
        { 'area': 'Liberecký kraj', 'month': 7, 'count': 2 },
        { 'area': 'Karlovarský kraj', 'month': 7, 'count': 2 },
        { 'area': 'Hlavní město Praha', 'month': 8, 'count': 2 },
        { 'area': 'Středočeský kraj', 'month': 8, 'count': 9 },
        { 'area': 'Jihočeský kraj', 'month': 8, 'count': 6 },
        { 'area': 'Plzeňský kraj', 'month': 8, 'count': 6 },
        { 'area': 'Ústecký kraj', 'month': 8, 'count': 5 },
        { 'area': 'Královéhradecký kraj', 'month': 8, 'count': 0 },
        { 'area': 'Jihomoravský kraj', 'month': 8, 'count': 2 },
        { 'area': 'Moravskoslezský kraj', 'month': 8, 'count': 5 },
        { 'area': 'Olomoucký kraj', 'month': 8, 'count': 2 },
        { 'area': 'Zlínský kraj', 'month': 8, 'count': 3 },
        { 'area': 'Kraj Vysočina', 'month': 8, 'count': 5 },
        { 'area': 'Pardubický kraj', 'month': 8, 'count': 3 },
        { 'area': 'Liberecký kraj', 'month': 8, 'count': 4 },
        { 'area': 'Karlovarský kraj', 'month': 8, 'count': 1 },
        { 'area': 'Hlavní město Praha', 'month': 9, 'count': 2 },
        { 'area': 'Středočeský kraj', 'month': 9, 'count': 6 },
        { 'area': 'Jihočeský kraj', 'month': 9, 'count': 7 },
        { 'area': 'Plzeňský kraj', 'month': 9, 'count': 3 },
        { 'area': 'Ústecký kraj', 'month': 9, 'count': 4 },
        { 'area': 'Královéhradecký kraj', 'month': 9, 'count': 7 },
        { 'area': 'Jihomoravský kraj', 'month': 9, 'count': 10 },
        { 'area': 'Moravskoslezský kraj', 'month': 9, 'count': 3 },
        { 'area': 'Olomoucký kraj', 'month': 9, 'count': 2 },
        { 'area': 'Zlínský kraj', 'month': 9, 'count': 4 },
        { 'area': 'Kraj Vysočina', 'month': 9, 'count': 2 },
        { 'area': 'Pardubický kraj', 'month': 9, 'count': 1 },
        { 'area': 'Liberecký kraj', 'month': 9, 'count': 5 },
        { 'area': 'Karlovarský kraj', 'month': 9, 'count': 1 },
        { 'area': 'Hlavní město Praha', 'month': 10, 'count': 1 },
        { 'area': 'Středočeský kraj', 'month': 10, 'count': 10 },
        { 'area': 'Jihočeský kraj', 'month': 10, 'count': 2 },
        { 'area': 'Plzeňský kraj', 'month': 10, 'count': 1 },
        { 'area': 'Ústecký kraj', 'month': 10, 'count': 2 },
        { 'area': 'Královéhradecký kraj', 'month': 10, 'count': 2 },
        { 'area': 'Jihomoravský kraj', 'month': 10, 'count': 1 },
        { 'area': 'Moravskoslezský kraj', 'month': 10, 'count': 2 },
        { 'area': 'Olomoucký kraj', 'month': 10, 'count': 0 },
        { 'area': 'Zlínský kraj', 'month': 10, 'count': 4 },
        { 'area': 'Kraj Vysočina', 'month': 10, 'count': 2 },
        { 'area': 'Pardubický kraj', 'month': 10, 'count': 3 },
        { 'area': 'Liberecký kraj', 'month': 10, 'count': 2 },
        { 'area': 'Karlovarský kraj', 'month': 10, 'count': 2 },
        { 'area': 'Hlavní město Praha', 'month': 11, 'count': 1 },
        { 'area': 'Středočeský kraj', 'month': 11, 'count': 4 },
        { 'area': 'Jihočeský kraj', 'month': 11, 'count': 1 },
        { 'area': 'Plzeňský kraj', 'month': 11, 'count': 5 },
        { 'area': 'Ústecký kraj', 'month': 11, 'count': 3 },
        { 'area': 'Královéhradecký kraj', 'month': 11, 'count': 0 },
        { 'area': 'Jihomoravský kraj', 'month': 11, 'count': 4 },
        { 'area': 'Moravskoslezský kraj', 'month': 11, 'count': 1 },
        { 'area': 'Olomoucký kraj', 'month': 11, 'count': 4 },
        { 'area': 'Zlínský kraj', 'month': 11, 'count': 1 },
        { 'area': 'Kraj Vysočina', 'month': 11, 'count': 4 },
        { 'area': 'Pardubický kraj', 'month': 11, 'count': 3 },
        { 'area': 'Liberecký kraj', 'month': 11, 'count': 2 },
        { 'area': 'Karlovarský kraj', 'month': 11, 'count': 0 },
        { 'area': 'Hlavní město Praha', 'month': 12, 'count': 0 },
        { 'area': 'Středočeský kraj', 'month': 12, 'count': 3 },
        { 'area': 'Jihočeský kraj', 'month': 12, 'count': 3 },
        { 'area': 'Plzeňský kraj', 'month': 12, 'count': 1 },
        { 'area': 'Ústecký kraj', 'month': 12, 'count': 4 },
        { 'area': 'Královéhradecký kraj', 'month': 12, 'count': 1 },
        { 'area': 'Jihomoravský kraj', 'month': 12, 'count': 4 },
        { 'area': 'Moravskoslezský kraj', 'month': 12, 'count': 4 },
        { 'area': 'Olomoucký kraj', 'month': 12, 'count': 2 },
        { 'area': 'Zlínský kraj', 'month': 12, 'count': 5 },
        { 'area': 'Kraj Vysočina', 'month': 12, 'count': 1 },
        { 'area': 'Pardubický kraj', 'month': 12, 'count': 3 },
        { 'area': 'Liberecký kraj', 'month': 12, 'count': 0 },
        { 'area': 'Karlovarský kraj', 'month': 12, 'count': 1 }],
        'severe_injuries': [{ 'area': 'Hlavní město Praha', 'month': 1, 'count': 20 },
        { 'area': 'Středočeský kraj', 'month': 1, 'count': 26 },
        { 'area': 'Jihočeský kraj', 'month': 1, 'count': 14 },
        { 'area': 'Plzeňský kraj', 'month': 1, 'count': 6 },
        { 'area': 'Ústecký kraj', 'month': 1, 'count': 6 },
        { 'area': 'Královéhradecký kraj', 'month': 1, 'count': 12 },
        { 'area': 'Jihomoravský kraj', 'month': 1, 'count': 15 },
        { 'area': 'Moravskoslezský kraj', 'month': 1, 'count': 11 },
        { 'area': 'Olomoucký kraj', 'month': 1, 'count': 6 },
        { 'area': 'Zlínský kraj', 'month': 1, 'count': 5 },
        { 'area': 'Kraj Vysočina', 'month': 1, 'count': 3 },
        { 'area': 'Pardubický kraj', 'month': 1, 'count': 3 },
        { 'area': 'Liberecký kraj', 'month': 1, 'count': 1 },
        { 'area': 'Karlovarský kraj', 'month': 1, 'count': 3 },
        { 'area': 'Hlavní město Praha', 'month': 2, 'count': 8 },
        { 'area': 'Středočeský kraj', 'month': 2, 'count': 12 },
        { 'area': 'Jihočeský kraj', 'month': 2, 'count': 9 },
        { 'area': 'Plzeňský kraj', 'month': 2, 'count': 8 },
        { 'area': 'Ústecký kraj', 'month': 2, 'count': 9 },
        { 'area': 'Královéhradecký kraj', 'month': 2, 'count': 4 },
        { 'area': 'Jihomoravský kraj', 'month': 2, 'count': 10 },
        { 'area': 'Moravskoslezský kraj', 'month': 2, 'count': 8 },
        { 'area': 'Olomoucký kraj', 'month': 2, 'count': 3 },
        { 'area': 'Zlínský kraj', 'month': 2, 'count': 5 },
        { 'area': 'Kraj Vysočina', 'month': 2, 'count': 1 },
        { 'area': 'Pardubický kraj', 'month': 2, 'count': 3 },
        { 'area': 'Liberecký kraj', 'month': 2, 'count': 1 },
        { 'area': 'Karlovarský kraj', 'month': 2, 'count': 3 },
        { 'area': 'Hlavní město Praha', 'month': 3, 'count': 14 },
        { 'area': 'Středočeský kraj', 'month': 3, 'count': 14 },
        { 'area': 'Jihočeský kraj', 'month': 3, 'count': 13 },
        { 'area': 'Plzeňský kraj', 'month': 3, 'count': 9 },
        { 'area': 'Ústecký kraj', 'month': 3, 'count': 13 },
        { 'area': 'Královéhradecký kraj', 'month': 3, 'count': 6 },
        { 'area': 'Jihomoravský kraj', 'month': 3, 'count': 10 },
        { 'area': 'Moravskoslezský kraj', 'month': 3, 'count': 10 },
        { 'area': 'Olomoucký kraj', 'month': 3, 'count': 2 },
        { 'area': 'Zlínský kraj', 'month': 3, 'count': 13 },
        { 'area': 'Kraj Vysočina', 'month': 3, 'count': 0 },
        { 'area': 'Pardubický kraj', 'month': 3, 'count': 7 },
        { 'area': 'Liberecký kraj', 'month': 3, 'count': 3 },
        { 'area': 'Karlovarský kraj', 'month': 3, 'count': 3 },
        { 'area': 'Hlavní město Praha', 'month': 4, 'count': 16 },
        { 'area': 'Středočeský kraj', 'month': 4, 'count': 31 },
        { 'area': 'Jihočeský kraj', 'month': 4, 'count': 16 },
        { 'area': 'Plzeňský kraj', 'month': 4, 'count': 6 },
        { 'area': 'Ústecký kraj', 'month': 4, 'count': 15 },
        { 'area': 'Královéhradecký kraj', 'month': 4, 'count': 7 },
        { 'area': 'Jihomoravský kraj', 'month': 4, 'count': 19 },
        { 'area': 'Moravskoslezský kraj', 'month': 4, 'count': 9 },
        { 'area': 'Olomoucký kraj', 'month': 4, 'count': 10 },
        { 'area': 'Zlínský kraj', 'month': 4, 'count': 6 },
        { 'area': 'Kraj Vysočina', 'month': 4, 'count': 9 },
        { 'area': 'Pardubický kraj', 'month': 4, 'count': 4 },
        { 'area': 'Liberecký kraj', 'month': 4, 'count': 1 },
        { 'area': 'Karlovarský kraj', 'month': 4, 'count': 6 },
        { 'area': 'Hlavní město Praha', 'month': 5, 'count': 17 },
        { 'area': 'Středočeský kraj', 'month': 5, 'count': 25 },
        { 'area': 'Jihočeský kraj', 'month': 5, 'count': 19 },
        { 'area': 'Plzeňský kraj', 'month': 5, 'count': 11 },
        { 'area': 'Ústecký kraj', 'month': 5, 'count': 9 },
        { 'area': 'Královéhradecký kraj', 'month': 5, 'count': 10 },
        { 'area': 'Jihomoravský kraj', 'month': 5, 'count': 19 },
        { 'area': 'Moravskoslezský kraj', 'month': 5, 'count': 8 },
        { 'area': 'Olomoucký kraj', 'month': 5, 'count': 8 },
        { 'area': 'Zlínský kraj', 'month': 5, 'count': 5 },
        { 'area': 'Kraj Vysočina', 'month': 5, 'count': 4 },
        { 'area': 'Pardubický kraj', 'month': 5, 'count': 10 },
        { 'area': 'Liberecký kraj', 'month': 5, 'count': 4 },
        { 'area': 'Karlovarský kraj', 'month': 5, 'count': 2 },
        { 'area': 'Hlavní město Praha', 'month': 6, 'count': 12 },
        { 'area': 'Středočeský kraj', 'month': 6, 'count': 26 },
        { 'area': 'Jihočeský kraj', 'month': 6, 'count': 23 },
        { 'area': 'Plzeňský kraj', 'month': 6, 'count': 11 },
        { 'area': 'Ústecký kraj', 'month': 6, 'count': 16 },
        { 'area': 'Královéhradecký kraj', 'month': 6, 'count': 11 },
        { 'area': 'Jihomoravský kraj', 'month': 6, 'count': 20 },
        { 'area': 'Moravskoslezský kraj', 'month': 6, 'count': 9 },
        { 'area': 'Olomoucký kraj', 'month': 6, 'count': 13 },
        { 'area': 'Zlínský kraj', 'month': 6, 'count': 5 },
        { 'area': 'Kraj Vysočina', 'month': 6, 'count': 7 },
        { 'area': 'Pardubický kraj', 'month': 6, 'count': 6 },
        { 'area': 'Liberecký kraj', 'month': 6, 'count': 2 },
        { 'area': 'Karlovarský kraj', 'month': 6, 'count': 9 },
        { 'area': 'Hlavní město Praha', 'month': 7, 'count': 13 },
        { 'area': 'Středočeský kraj', 'month': 7, 'count': 29 },
        { 'area': 'Jihočeský kraj', 'month': 7, 'count': 30 },
        { 'area': 'Plzeňský kraj', 'month': 7, 'count': 9 },
        { 'area': 'Ústecký kraj', 'month': 7, 'count': 13 },
        { 'area': 'Královéhradecký kraj', 'month': 7, 'count': 7 },
        { 'area': 'Jihomoravský kraj', 'month': 7, 'count': 20 },
        { 'area': 'Moravskoslezský kraj', 'month': 7, 'count': 12 },
        { 'area': 'Olomoucký kraj', 'month': 7, 'count': 4 },
        { 'area': 'Zlínský kraj', 'month': 7, 'count': 7 },
        { 'area': 'Kraj Vysočina', 'month': 7, 'count': 11 },
        { 'area': 'Pardubický kraj', 'month': 7, 'count': 7 },
        { 'area': 'Liberecký kraj', 'month': 7, 'count': 4 },
        { 'area': 'Karlovarský kraj', 'month': 7, 'count': 2 },
        { 'area': 'Hlavní město Praha', 'month': 8, 'count': 12 },
        { 'area': 'Středočeský kraj', 'month': 8, 'count': 36 },
        { 'area': 'Jihočeský kraj', 'month': 8, 'count': 21 },
        { 'area': 'Plzeňský kraj', 'month': 8, 'count': 8 },
        { 'area': 'Ústecký kraj', 'month': 8, 'count': 21 },
        { 'area': 'Královéhradecký kraj', 'month': 8, 'count': 12 },
        { 'area': 'Jihomoravský kraj', 'month': 8, 'count': 17 },
        { 'area': 'Moravskoslezský kraj', 'month': 8, 'count': 19 },
        { 'area': 'Olomoucký kraj', 'month': 8, 'count': 3 },
        { 'area': 'Zlínský kraj', 'month': 8, 'count': 17 },
        { 'area': 'Kraj Vysočina', 'month': 8, 'count': 10 },
        { 'area': 'Pardubický kraj', 'month': 8, 'count': 14 },
        { 'area': 'Liberecký kraj', 'month': 8, 'count': 3 },
        { 'area': 'Karlovarský kraj', 'month': 8, 'count': 8 },
        { 'area': 'Hlavní město Praha', 'month': 9, 'count': 13 },
        { 'area': 'Středočeský kraj', 'month': 9, 'count': 29 },
        { 'area': 'Jihočeský kraj', 'month': 9, 'count': 24 },
        { 'area': 'Plzeňský kraj', 'month': 9, 'count': 5 },
        { 'area': 'Ústecký kraj', 'month': 9, 'count': 11 },
        { 'area': 'Královéhradecký kraj', 'month': 9, 'count': 11 },
        { 'area': 'Jihomoravský kraj', 'month': 9, 'count': 18 },
        { 'area': 'Moravskoslezský kraj', 'month': 9, 'count': 7 },
        { 'area': 'Olomoucký kraj', 'month': 9, 'count': 10 },
        { 'area': 'Zlínský kraj', 'month': 9, 'count': 7 },
        { 'area': 'Kraj Vysočina', 'month': 9, 'count': 7 },
        { 'area': 'Pardubický kraj', 'month': 9, 'count': 7 },
        { 'area': 'Liberecký kraj', 'month': 9, 'count': 2 },
        { 'area': 'Karlovarský kraj', 'month': 9, 'count': 7 },
        { 'area': 'Hlavní město Praha', 'month': 10, 'count': 18 },
        { 'area': 'Středočeský kraj', 'month': 10, 'count': 30 },
        { 'area': 'Jihočeský kraj', 'month': 10, 'count': 12 },
        { 'area': 'Plzeňský kraj', 'month': 10, 'count': 5 },
        { 'area': 'Ústecký kraj', 'month': 10, 'count': 8 },
        { 'area': 'Královéhradecký kraj', 'month': 10, 'count': 11 },
        { 'area': 'Jihomoravský kraj', 'month': 10, 'count': 7 },
        { 'area': 'Moravskoslezský kraj', 'month': 10, 'count': 12 },
        { 'area': 'Olomoucký kraj', 'month': 10, 'count': 5 },
        { 'area': 'Zlínský kraj', 'month': 10, 'count': 5 },
        { 'area': 'Kraj Vysočina', 'month': 10, 'count': 8 },
        { 'area': 'Pardubický kraj', 'month': 10, 'count': 4 },
        { 'area': 'Liberecký kraj', 'month': 10, 'count': 3 },
        { 'area': 'Karlovarský kraj', 'month': 10, 'count': 8 },
        { 'area': 'Hlavní město Praha', 'month': 11, 'count': 13 },
        { 'area': 'Středočeský kraj', 'month': 11, 'count': 15 },
        { 'area': 'Jihočeský kraj', 'month': 11, 'count': 6 },
        { 'area': 'Plzeňský kraj', 'month': 11, 'count': 5 },
        { 'area': 'Ústecký kraj', 'month': 11, 'count': 7 },
        { 'area': 'Královéhradecký kraj', 'month': 11, 'count': 6 },
        { 'area': 'Jihomoravský kraj', 'month': 11, 'count': 9 },
        { 'area': 'Moravskoslezský kraj', 'month': 11, 'count': 5 },
        { 'area': 'Olomoucký kraj', 'month': 11, 'count': 7 },
        { 'area': 'Zlínský kraj', 'month': 11, 'count': 1 },
        { 'area': 'Kraj Vysočina', 'month': 11, 'count': 3 },
        { 'area': 'Pardubický kraj', 'month': 11, 'count': 2 },
        { 'area': 'Liberecký kraj', 'month': 11, 'count': 2 },
        { 'area': 'Karlovarský kraj', 'month': 11, 'count': 2 },
        { 'area': 'Hlavní město Praha', 'month': 12, 'count': 11 },
        { 'area': 'Středočeský kraj', 'month': 12, 'count': 22 },
        { 'area': 'Jihočeský kraj', 'month': 12, 'count': 8 },
        { 'area': 'Plzeňský kraj', 'month': 12, 'count': 0 },
        { 'area': 'Ústecký kraj', 'month': 12, 'count': 9 },
        { 'area': 'Královéhradecký kraj', 'month': 12, 'count': 9 },
        { 'area': 'Jihomoravský kraj', 'month': 12, 'count': 12 },
        { 'area': 'Moravskoslezský kraj', 'month': 12, 'count': 7 },
        { 'area': 'Olomoucký kraj', 'month': 12, 'count': 4 },
        { 'area': 'Zlínský kraj', 'month': 12, 'count': 2 },
        { 'area': 'Kraj Vysočina', 'month': 12, 'count': 2 },
        { 'area': 'Pardubický kraj', 'month': 12, 'count': 2 },
        { 'area': 'Liberecký kraj', 'month': 12, 'count': 3 },
        { 'area': 'Karlovarský kraj', 'month': 12, 'count': 2 }]
    }

    const monthNames = {
        1: "Leden",
        2: "Únor",
        3: "Březen",
        4: "Duben",
        5: "Květen",
        6: "Červen",
        7: "Červenec",
        8: "Srpen",
        9: "Září",
        10: "Říjen",
        11: "Listopad",
        12: "Prosinec"
    };

    const areaNames = [
        "Hlavní město Praha",
        "Středočeský kraj",
        "Jihočeský kraj",
        "Plzeňský kraj",
        "Karlovarský kraj",
        "Ústecký kraj",
        "Liberecký kraj",
        "Královéhradecký kraj",
        "Pardubický kraj",
        "Kraj Vysočina",
        "Jihomoravský kraj",
        "Olomoucký kraj",
        "Moravskoslezský kraj",
        "Zlínský kraj",
    ]
    const rawColors = ['#F3C300', '#875692', '#F38400', '#A1CAF1', '#BE0032', '#C2B280', '#848482', '#008856', '#E68FAC', '#0067A5', '#F99379', '#604E97', '#F6A600', '#B3446C', '#DCD300', '#882D17', '#8DB600', '#654522', '#E25822', '#2B3D26']
    const areaColors = Object.fromEntries(
        areaNames.map((area, i) => [area, rawColors[i % rawColors.length]])
    );

    function drawAreaMonthChart(data, elementId, hiddenAreas) {
        d3.select(`#${elementId} .chart > *`).remove();

        const filteredData = data.filter(d => !hiddenAreas.has(d.area));

        const width = parseInt(d3.select(`#${elementId} .chart`).style("width"));
        const verticalScreen = (window.screen.width < window.screen.height);

        // Determine the series that need to be stacked.
        const series = d3.stack()
            .keys(d3.union(filteredData.map(d => d.area))) // distinct series keys, in input order
            .value(([, D], key) => D.get(key).count) // get value for each series key and stack
            (d3.index(filteredData, d => d.month, d => d.area)); // group by stack then series key

        const areas = new Set(filteredData.map(d => d.area));

        const fontSize = verticalScreen ? 10 : 14;
        const rowHeight = Math.max(areas.size * 7, fontSize * 1.3)

        // Specify the chart’s dimensions.
        const marginTop = (areaNames.length + 1) * fontSize * 1.3 + 10;
        const marginRight = 10;
        const marginBottom = 7;
        const marginLeft = verticalScreen ? 55 : 80;
        const height = series[0].length * rowHeight + marginTop + marginBottom;

        // Prepare the scales for positional and color encodings.
        // Fx encodes the area.
        const fy = d3.scaleBand()
            .domain(new Set(filteredData.map(d => d.month)))
            .rangeRound([marginTop, height - marginBottom])
            .paddingInner(0.05);

        // Create the scales.
        const y = d3.scaleBand()
            .domain(areas)
            .rangeRound([0, fy.bandwidth()])
            .paddingInner(0.2);
        const x = d3.scaleLinear()
            .domain([0, d3.max(data, d => d.count)])
            .rangeRound([marginLeft, width - marginRight]);

        // Create the SVG container.
        const svg = d3.select(`#${elementId} .chart`)
            .attr("style", `height: ${height}px;`)
            .append("svg")
            .attr("width", width)
            .attr("height", height)
            .attr("viewBox", [0, 0, width, height])
            .attr("style", "max-width: 100%; height: auto; font: 10px sans-serif;");

        // Append the horizontal axis multiple times.
        svg.append("g")
            .attr("transform", `translate(0,${marginTop})`)
            .call(d3.axisTop(x).tickFormat(d3.format("d")).tickSizeOuter(0))
            .call(g => g.selectAll(".domain").remove())
            // vertical lines
            .call(g => g.selectAll(".tick line").clone()
                .attr("y2", height - marginTop - marginBottom)
                .attr("stroke-opacity", 0.1))
            .attr("font-size", fontSize);
        
        if (hiddenAreas.size < 10) {
            fy.domain().forEach((month, i) => {
                svg.append("g")
                    .attr("transform", `translate(0,${fy(month) + fy.bandwidth() + fontSize/4*3})`)
                    .call(d3.axisTop(x).tickFormat(d3.format("d")).tickSizeOuter(0).tickSize(0))
                    .call(g => g.selectAll(".domain").remove())
                    .call(g => g.selectAll("text").nodes()[0]?.remove())  // Remove first label
                    .attr("font-size", fontSize)
                    .attr("opacity", 0.4);
            });
        }

        // Append the vertical axis.
        svg.append("g")
            .attr("transform", `translate(${marginLeft},0)`)
            .call(d3.axisLeft(fy).tickSizeOuter(0))
            .selectAll("text")
            .attr("font-size", fontSize)
            .text(d => monthNames[d]);

        // Append a group for each area, and a rect for each class.
        svg.append("g")
            .selectAll()
            .data(d3.group(filteredData, d => d.month))
            .join("g")
            .attr("transform", ([area]) => `translate(0,${fy(area)})`)
            .selectAll()
            .data(([, d]) => d)
            .join("rect")
            .attr("x", d => x(0))
            .attr("y", d => y(d.area))
            .attr("width", d => Math.abs(x(0) - x(d.count)))
            .attr("height", y.bandwidth())
            .attr("fill", d => areaColors[d.area])
            .attr("rx", 3)
            .append("title")
            .text(d => `${d.area}\nMěsíc: ${monthNames[d.month]}\nPočet: ${d.count}`);

        // Create legend
        const legend = svg.append("g")
            .attr("transform", `translate(0, 0)`);
        areaNames.forEach((areaName, i) => {
            const legendRow = legend.append("g")
                .attr("transform", `translate(${marginLeft}, ${i * fontSize * 1.3})`)
                .style("cursor", "pointer")
                .on("click", function () {
                    if (hiddenAreas.has(areaName)) {
                        hiddenAreas.delete(areaName);
                    } else if (hiddenAreas.size < areaNames.length - 1) {
                        hiddenAreas.add(areaName);
                    }
                    drawAreaMonthChart(data, elementId, hiddenAreas);
                });

            // Add colored rectangle
            legendRow.append("rect")
                .attr("width", `${fontSize}px`)
                .attr("height", `${fontSize}px`)
                .attr("fill", areaColors[areaName])
                .attr("stroke", areaColors[areaName])
                .attr("fill-opacity", hiddenAreas.has(areaName) ? 0.4 : 1)
                .attr("rx", 3);

            // Add text label
            legendRow.append("text")
                .attr("x", 25)
                .attr("y", 9)
                .attr("dy", "0.32em")
                .style("font-size", `${fontSize}px`)
                .style("text-decoration", hiddenAreas.has(areaName) ? "line-through" : "none")
                .attr("opacity", hiddenAreas.has(areaName) ? 0.4 : 1)
                .text(areaName);
        });
    }
</script>

<script>
    // brewer_lakota: [, , "#931e18", "#da7901", "#247d3f", "#20235b"],
    const colors = {
        deaths: "#04a3bd",
        severe_injuries: "#f0be3d",
    }
</script>

<p>Co je Vize nula, se můžeme dočíst na webu <a href="https://cdv.gov.cz/vizenula/" target="_blank" rel="noopener">Centra dopravního výzkumu</a>
:</p>
<blockquote>
<p>VIZE NULA je dlouhodobá vize bezpečného silničního provozu, ve kterém nikdo nezemře ani neutrpí vážné zranění při dopravní nehodě.</p>
</blockquote>
<p>Splnění Vize nula by tedy znamenalo, že by počet úmrtí i počet těžkých zranění v silniční dopravě byly rovny nule, odtud patrně název této vize. Chtěl jsem se proto podívat, jak si v tomto ohledu vedeme.</p>
<p>V roce 2025 zemřelo v České republice v silniční dopravě 421 lidí a 1647 bylo těžce zraněno. Obě čísla jsou významně větší než 0. V roce 2025 Vize nula v ČR splněna nebyla. Počet úmrtí alespoň rok od roku klesá, i když zoufale pomalu.</p>

<!-- static chart -->
<div class="chart-box" id="death_progress_chart">
    <div class="chart-header">
        <img class="chart-header-logo light" alt="logo" width="100" height="100" src="/images/logo-light.svg">
        <img class="chart-header-logo dark" alt="logo" width="100" height="100" src="/images/logo-dark.svg">
        <h1>Vývoj počtu úmrtí v silničním provozu od roku 2016 do 2025</h1>
        <p>Každý sloupek znázorňuje svou výškou počet úmrtí v silničním provozu v České republice v daném roce.</p>
    </div>
    <div class="chart"></div>
    <div class="chart-footer">
        <span class="source">Zdroj: <a href="https://policie.gov.cz/clanek/statistika-nehodovosti.aspx?q=Y2hudW09Mg%3d%3d" target="_blank">Policie ČR</a></span>
    </div>
</div>
<script>
    drawProgressChart(progressData.deaths, "death_progress_chart", colors.deaths);
</script>

<p>Počet těžkých zranění bohužel od roku 2021 spíše stagnuje, v roce 2025 dokonce oproti roku 2024 narostl.</p>

<!-- static chart -->
<div class="chart-box" id="severe_injury_progress_chart">
    <div class="chart-header">
        <img class="chart-header-logo light" alt="logo" width="100" height="100" src="/images/logo-light.svg">
        <img class="chart-header-logo dark" alt="logo" width="100" height="100" src="/images/logo-dark.svg">
        <h1>Vývoj počtu těžkých zranění v silničním provozu od roku 2016 do 2025</h1>
        <p>Každý sloupek znázorňuje svou výškou počet těžkých zranění v silničním provozu v České republice v daném roce.</p>
    </div>
    <div class="chart"></div>
    <div class="chart-footer">
        <span class="source">Zdroj: <a href="https://policie.gov.cz/clanek/statistika-nehodovosti.aspx?q=Y2hudW09Mg%3d%3d" target="_blank">Policie ČR</a></span>
    </div>
</div>
<script>
    drawProgressChart(progressData.severe_injuries, "severe_injury_progress_chart", colors.severe_injuries);
</script>

<h2 id="jednotlivé-kraje">Jednotlivé kraje</h2>
<p>Podívejme se na jednotlivé kraje. Najde se alespoň jeden, který Vizi nula v roce 2025 splnil?</p>

<!-- static chart -->
<div class="chart-box" id="deaths_by_area_chart">
    <div class="chart-header">
        <img class="chart-header-logo light" alt="logo" width="100" height="100" src="/images/logo-light.svg">
        <img class="chart-header-logo dark" alt="logo" width="100" height="100" src="/images/logo-dark.svg">
        <h1>Počet úmrtí v silničním provozu v roce 2025 podle krajů</h1>
        <p>Každý sloupek znázorňuje svou výškou počet úmrtí v silničním provozu v roce 2025 v různých krajích.</p>
    </div>
    <div class="chart"></div>
    <div class="chart-footer">
        <span class="source">Zdroj: <a href="https://policie.gov.cz/clanek/statistika-nehodovosti.aspx?q=Y2hudW09Mg%3d%3d" target="_blank">Policie ČR</a></span>
    </div>
</div>
<script>
    drawAreaChart(areaData.deaths, "deaths_by_area_chart", colors.deaths);
</script>

<p>Bohužel také ne. Nutno podotknout, že kraj s nejmenším počtem úmrtí, Karlovarský kraj, je současně nejmenším krajem <a href="https://csu.gov.cz/porovnani-kraju" target="_blank" rel="noopener">podle počtu obyvatel</a>
. Hlavní město Praha, na druhém místě, je ale naopak jedním z největších.</p>
<p>Významně nenulové počty těžkých zranění zanechávám bez komentáře. Pořadí krajů v grafu je stejné jako v tom předchozím.</p>

<!-- static chart -->
<div class="chart-box" id="severe_injuries_by_area_chart">
    <div class="chart-header">
        <img class="chart-header-logo light" alt="logo" width="100" height="100" src="/images/logo-light.svg">
        <img class="chart-header-logo dark" alt="logo" width="100" height="100" src="/images/logo-dark.svg">
        <h1>Počet těžkých zranění v silničním provozu v roce 2025 podle krajů</h1>
        <p>Každý sloupek znázorňuje svou výškou počet těžkých zranění v silničním provozu v roce 2025 v různých krajích.</p>
    </div>
    <div class="chart"></div>
    <div class="chart-footer">
        <span class="source">Zdroj: <a href="https://policie.gov.cz/clanek/statistika-nehodovosti.aspx?q=Y2hudW09Mg%3d%3d" target="_blank">Policie ČR</a></span>
    </div>
</div>
<script>
    drawAreaChart(areaData.severe_injuries, "severe_injuries_by_area_chart", colors.severe_injuries);
</script>

<h2 id="jednotlivé-kraje-v-jednotlivých-měsících">Jednotlivé kraje v jednotlivých měsících</h2>
<p>Podívejme se tedy nejen na kraje, ale i na jednotlivé měsíce. Dokážeme najít kraj a měsíc, ve kterých byla splněna Vize nula?</p>

<!-- static chart -->
<div class="chart-box" id="deaths_by_area_by_month_chart">
    <div class="chart-header">
        <img class="chart-header-logo light" alt="logo" width="100" height="100" src="/images/logo-light.svg">
        <img class="chart-header-logo dark" alt="logo" width="100" height="100" src="/images/logo-dark.svg">
        <h1>Počet úmrtí v silničním provozu v měsících roku 2025 podle krajů</h1>
        <p>Délka řádku znázorňuje počet úmrtí v daném kraji v daném měsíci roku 2025. Klepnutím na kraj v legendě můžete daný kraj z grafu skrýt. </p>
    </div>
    <div class="chart"></div>
    <div class="chart-footer">
        <span class="source">Zdroj: <a href="https://policie.gov.cz/clanek/statistika-nehodovosti.aspx?q=Y2hudW09Mg%3d%3d" target="_blank">Policie ČR</a></span>
    </div>
</div>
<script>
    var hiddenAreasDeaths = new Set();
    drawAreaMonthChart(areaMonthData.deaths, "deaths_by_area_by_month_chart", hiddenAreasDeaths);
</script>


<!-- static chart -->
<div class="chart-box" id="severe_injuries_by_area_by_month_chart">
    <div class="chart-header">
        <img class="chart-header-logo light" alt="logo" width="100" height="100" src="/images/logo-light.svg">
        <img class="chart-header-logo dark" alt="logo" width="100" height="100" src="/images/logo-dark.svg">
        <h1>Počet těžkých zranění v silničním provozu v měsících roku 2025 podle krajů</h1>
        <p>Délka řádku znázorňuje počet těžkých zranění v daném kraji v daném měsíci roku 2025. Klepnutím na kraj v legendě můžete daný kraj z grafu skrýt. </p>
    </div>
    <div class="chart"></div>
    <div class="chart-footer">
        <span class="source">Zdroj: <a href="https://policie.gov.cz/clanek/statistika-nehodovosti.aspx?q=Y2hudW09Mg%3d%3d" target="_blank">Policie ČR</a></span>
    </div>
</div>
<script>
    var hiddenAreasSevereInjury = new Set();
    drawAreaMonthChart(areaMonthData.severe_injuries, "severe_injuries_by_area_by_month_chart", hiddenAreasSevereInjury);
</script>

<p>Opět ne. Nejblíže byl Liberecký kraj, druhý nejmenší kraj, v únoru 2025, což je nejkratší kalendářní měsíc. &ldquo;Pouze&rdquo; jedno těžké zranění a nula úmrtí. Důvod k oslavě? Asi ne.</p>
<h3 id="to-jedno-těžké-zranění-z-libereckého-kraje">To jedno těžké zranění z Libereckého kraje</h3>
<p>Možná vás, jako mě, napadlo, jaká byla ta jedna nehoda v únoru 2025 v Libereckém kraji, která vyústila v těžké zranění. Na všechny veřejné informace se můžete podívat v <a href="https://nehody.cdv.cz/detail.php?p1=180125000246" target="_blank" rel="noopener">aplikaci Centra dopravního výzkumu</a>
.</p>
<h2 id="závěr">Závěr</h2>
<p>Doufám, že v letošním roce budou počty úmrtí i těžkých zranění zase menší. Snad se nám i podaří, aby počty klesaly rychleji. Pevně věřím, že jednoho dne Vize nula dosáhneme (alespoň velmi blízko nule). Původní plán byl dosáhnout Vize nula do roku 2020:</p>
<blockquote>
<p>Základním cílem VIZE NULA je, aby nejpozději do roku 2050 nebyla na pozemních komunikacích usmrcena nebo těžce zraněna žádná osoba. Původní záměr ze Švédska z roku 1997, že se tak v oblasti fatalit mělo stát již v roce 2020, byl nakonec realisticky posunut o tři dekády, tedy na rok 2050. Nástroje, jak se ke společnému cíli přiblížit, definují v jednotlivých dekádách uvedené Strategie.</p>
</blockquote>
]]></description></item></channel></rss>