Chartjs: как удалить информацию о точке данных с метки?

#chart.js

Вопрос:

Я пытаюсь удалить набор данных из метки: введите описание изображения здесь

Но обратный вызов метки вызывается дважды, поэтому я не знаю, как это сделать.

Я ожидал, что в обратном вызове будет массив, и что вы можете просто удалить тот, который не нужен.

вот что я до сих пор и пробовал:

     var labels = [];
    for (let index = 0; index < 12; index  ) {
        labels.push(index);
    }

    window.onload = function () {
        var canvas = document.getElementById('elm-chart'),
            ctx = canvas.getContext('2d');

        var myLineChart = new Chart(ctx, {
            type: 'line',
            data: {
                labels: labels,
                datasets: [
                    {
                        label: '-15',
                        data: [
                            {
                                x: 0,
                                y: 10,
                            },
                            {
                                x: 1,
                                y: 20,
                            },
                        ],
                        borderColor: 'red',
                    },
                    {
                        label: '15',
                        data: [
                            {
                                x: 1,
                                y: 20,
                            },
                            {
                                x: 2,
                                y: 30,
                            },
                        ],
                        borderColor: 'blue',
                    },
                    {
                        label: '25',
                        data: [
                            {
                                x: 2,
                                y: 30,
                            },
                            {
                                x: 3,
                                y: 35,
                            },
                        ],
                        borderColor: 'yellow',
                    },
                    {
                        label: '-15',
                        data: [
                            {
                                x: 6,
                                y: -10,
                            },
                            {
                                x: 7,
                                y: -20,
                            },
                        ],
                        borderColor: 'red',
                    },
                    {
                        label: '15',
                        data: [
                            {
                                x: 7,
                                y: -20,
                            },
                            {
                                x: 8,
                                y: -30,
                            },
                        ],
                        borderColor: 'blue',
                    },
                    {
                        label: '25',
                        data: [
                            {
                                x: 8,
                                y: -30,
                            },
                            {
                                x: 9,
                                y: -35,
                            },
                        ],
                        borderColor: 'yellow',
                    },
                ],
            },
            options: {
                responsive: true,
                plugins: {
                    legend: {
                        onClick: (evt, legendItem, legend) => {
                            let newVal = !legendItem.hidden;
                            legend.chart.data.datasets.forEach((dataset) => {
                                if (dataset.label === legendItem.text) {
                                    dataset.hidden = newVal;
                                }
                            });
                            legend.chart.update();
                        },
                        labels: {
                            filter: (legendItem, chartData) => {
                                let entries = chartData.datasets.map((e) => e.label);
                                return entries.indexOf(legendItem.text) === legendItem.datasetIndex;
                            },
                        },
                    },
                },
                scales: {
                    x: {
                        type: 'linear',
                        ticks: {
                            stepSize: 30,
                        },
                    },
                },
                plugins: {
                    tooltip: {
                        callbacks: {
                            title: function (context) {
                                return [`test`, 'test2'];
                            },
                            label: function (context) {
                                console.log(context.dataset.label);
                                console.log(context.formattedValue);
                                console.log(context);
                                return [
                                    `${context.dataset.label}:${context.formattedValue}`,
                                    'test',
                                ];
                            },
                        },
                    },
                },
            },
        });
    }; 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.2.1/chart.min.js"></script>
<canvas id="elm-chart" width="640" height="480"></canvas> 

Поэтому, чтобы было ясно, я не хочу удалять точку данных в наборе данных. Я просто хочу удалить 1 точку данных с метки, всегда верхнюю

Комментарии:

1. Есть ли причина, по которой у вас так много наборов данных?

2. @Jesper Да, мне нужно было переключать каждую строку и придавать каждой цвет. Сделать каждую строку набором данных казалось лучшим решением.

Ответ №1:

Что вы можете сделать, так это вместо использования всплывающей подсказки по умолчанию использовать всплывающую подсказку html.

В JS, который делает всплывающую подсказку вместо циклического обхода каждого активного элемента, вы берете только первый и отображаете его.

Официальный образец html-подсказки: https://www.chartjs.org/docs/master/samples/tooltip/html.html

Комментарии:

1. Спасибо! Я попробую это сделать. Не по теме, как бы вы написали имя поверх строки? Есть ли что-то вроде внешней подсказки, которую вы можете нарисовать html на графике?

2. Для этого вы можете использовать плагин datalabels: chartjs-plugin-datalabels.netlify.app/samples/charts/line.html