Использование меток данных и диаграммы JS с диаграммой js -node-canvas - PullRequest
0 голосов
/ 06 августа 2020

Я использую NodeJS с Chart JS для рендеринга графика непосредственно в файл, и он отлично работает.

Я делаю это с помощью ChartjsNodeCanvas npm модуль установлен.

Для отображения меток на графике я использую официальный Chart JS plugin Chart JS -plugin-datalabels

Но похоже У модуля Canvas другая схема активации плагинов Chart JS и, скорее всего, я неправильно активирую плагин datalabels. Поэтому я не могу отобразить метки на графике.

const Chart = require('chart.js');
const datalabels = require('chartjs-plugin-datalabels')
const { CanvasRenderService } = require('chartjs-node-canvas');

const width = 600;
const height = 400;
const chartCallback = (ChartJS) => {

    ChartJS.defaults.global.elements.rectangle.borderWidth = 2;
    ChartJS.plugins.register({
        datalabels
    });
};

const canvasRenderService = new CanvasRenderService(width, height, chartCallback);

(async () => {
    const configuration = {
        type: 'bar',
        data: {
            datasets: [
                {
                    type:"bar",
                    barThickness: 24,
                    label: 'My dataset',
                    data: ydata['data'],
                    backgroundColor: 'rgba(75,192, 192, 0.2)',
                    borderColor: 'rgba(54, 162, 135, 0.2)',
                    borderWidth: 1,
                    datalabels: {
                        align: 'start',
                        anchor: 'start'
                    }
                }, 
                labels: xdata,
            }

        options: {
            scales: {
                yAxes: [
                    {
                        id: 'left-y-axis',
                        position: 'left',
                        stacked: false,
                        ticks: {
                            beginAtZero: true,
                            callback: (value) => value + "R"
                        },
                    },
                    {
                        id: 'right-y-axis',
                        position: 'right'
                    }
                ],
                xAxes: [{
                    stacked: true,

                }]
            },
            plugins: {
                datalabels: {
                    backgroundColor: function(context) {
                        return context.dataset.backgroundColor;
                    },
                    borderRadius: 4,
                    color: 'red',
                    font: {
                        weight: 'bold'
                    },
                    formatter: Math.round
                }
              }
         }
    };
    const image = await canvasRenderService.renderToBuffer(configuration);
    fs.writeFileSync(tgMsgPath+"test.png", image)        
})();

Диаграмма отображается, но на графике нет меток.

1 Ответ

0 голосов
/ 13 августа 2020

Вот как активировать плагины с помощью Chart Js -niode-canvas:

const chartJsFactory = () => {
const Chart = require('chart.js');
require('chartjs-plugin-datalabels');
delete require.cache[require.resolve('chart.js')];
delete require.cache[require.resolve('chartjs-plugin-datalabels')];
return Chart;
}

// ...

const canvasRenderService = new CanvasRenderService(
  chartWidth,
  chartHeight,
  chartCallback,
  undefined,
  chartJsFactory
);
...