0

I use NodeJS with ChartJS to render graph directly to a file and it works fine.

I do it by ChartjsNodeCanvas npm module installed.

In order to display labels on the graph I use official ChartJS plugin ChartJS-plugin-datalabels

But it seems like Canvas module has a different scheme of activating ChartJS plugins and most probably I activate datalabels plugin incorrectly. So I can’t get the labels displayed on the graph.

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)        
})();

The chart is shown but no labels on the graph.

1 Answer 1

3

This is how to activate plugins with ChartJs-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
);
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.