英文:
Get X-coordinates for bars in chart.js 4
问题
I use Chart.js v4.2.1
<html>
<head>
    <meta charset="utf-8" />
    <title>Bar chart</title>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
    <div>
        <canvas id="barchart"></canvas>
    </div>
</body>
<script type="text/javascript">
    var canvas = document.getElementById('barchart');
    var chart = new Chart(canvas,
    {
        type: 'bar',
        data:
        {
            labels: ["Audi", "VW", "KIA"],
            datasets:
            [
              {
                  label: "Cars",
                  backgroundColor: ["#3e95cd", "#8e5ea2", "#3cba9f"],
                  data: [2601, 4769, 602],
               },
            ],
        },
    });
</script>
</html>
To get number of bars I execute chart.data.datasets[0].data.length and get 3.
To get the Y-value for the first bar I do chart.data.datasets[0].data[0] and get 2601.
How do I get the X-values (X-coordinates) for the bars?
(I am not interested in using any plugin).
Added:
Here is a sample where chart.scales.x is defined but chart.scales.y is not.
This happen when I add yAxisID which I need in my complete work.
<html>
<head>
    <meta charset="utf-8" />
    <title>Bar chart</title>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
    <div>
        <canvas id="barchart"></canvas>
        <div id="debug"></div>
    </div>
<script type="text/javascript">
    var canvas = document.getElementById('barchart');
    var chart = new Chart(canvas,
    {
        type: 'bar',
        data:
        {
            labels: ["Audi", "VW", "KIA"],
            datasets:
            [
                {
                    label: "Cars",
                    backgroundColor: ["#3e95cd", "#8e5ea2", "#3cba9f"],
                    data: [2601, 4769, 602],
                    yAxisID: "cars",
                },
            ],
        },
        options:
        {
            scales:
            {
                cars:
                {
                    position: "left",
                    ticks:
                    {
                        color: "red",
                    },
                    grid:
                    {
                        display: true,
                    },
                },
            },
        },
    });
    var dataSets = chart.data.datasets;
    var xPos = chart.scales.x.getPixelForValue(dataSets[0].data[0]);
    try
    {
        var yPos = chart.scales.cars.getPixelForValue(dataSets[0].data[0]);    // --> here y is undefined
        document.getElementById("debug").innerHTML = "xPos=" + xPos + ", yPos=" + yPos;
    }
    catch(e)
    {
        document.getElementById("debug").innerHTML = "xPos=" + xPos + "<br>" + e;
    }
</script>
</body>
</html>
英文:
I use Chart.js v4.2.1
<html>
<head>
    <meta charset="utf-8" />
    <title>Bar chart</title>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
    <div>
        <canvas id="barchart"></canvas>
    </div>
</body>
<script type="text/javascript">
    var canvas = document.getElementById('barchart');
    var chart = new Chart(canvas,
    {
        type: 'bar',
        data:
        {
            labels: ["Audi", "VW", "KIA"],
            datasets:
            [
              {
                  label: "Cars",
                  backgroundColor: ["#3e95cd", "#8e5ea2", "#3cba9f"],
                  data: [2601, 4769, 602],
               },
            ],
        },
    });
</script>
</html>
To get number of bars I execute chart.data.datasets[0].data.length and get 3.
To get the Y-value for the first bar I do chart.data.datasets[0].data[0] and get 2601.
How do I get the X-values (X-coordinates) for the bars?
(I am not interested in using any plugin).
Added:
Here is a sample where chart.scales.x is defined but chart.scales.y is not.
This happen when I add yAxisID which I need in my complete work.
<html>
<head>
    <meta charset="utf-8" />
    <title>Bar chart</title>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
    <div>
        <canvas id="barchart"></canvas>
        <div id="debug"></div>
    </div>
<script type="text/javascript">
    var canvas = document.getElementById('barchart');
    var chart = new Chart(canvas,
    {
        type: 'bar',
        data:
        {
            labels: ["Audi", "VW", "KIA"],
            datasets:
            [
                {
                    label: "Cars",
                    backgroundColor: ["#3e95cd", "#8e5ea2", "#3cba9f"],
                    data: [2601, 4769, 602],
                    yAxisID: "cars",
                },
            ],
        },
        options:
        {
            scales:
            {
                cars:
                {
                    position: "left",
                    ticks:
                    {
                        color: "red",
                    },
                    grid:
                    {
                        display: true,
                    },
                },
            },
        },
    });
    var dataSets = chart.data.datasets;
    var xPos = chart.scales.x.getPixelForValue(dataSets[0].data[0]);
    try
    {
        var yPos = chart.scales.cars.getPixelForValue(dataSets[0].data[0]);    // --> here y is undefined
        document.getElementById("debug").innerHTML = "xPos=" + xPos + ", yPos=" + yPos;
    }
    catch(e)
    {
        document.getElementById("debug").innerHTML = "xPos=" + xPos + "<br>" + e;
    }
</script>
</body>
</html>
答案1
得分: 3
你可以使用以下代码: chartInstance.scales.x.getPixelForValue(chart instance.data.labels[labelIndex]
英文:
You can use the following code: chartInstance.scales.x.getPixelForValue(chart instance.data.labels[labelIndex]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论