【问题标题】:Using Datalabels and ChartJS with Chartjs-node-canvas将 Datalabels 和 ChartJS 与 Chartjs-node-canvas 一起使用
【发布时间】:2020-08-06 08:23:57
【问题描述】:

我使用 NodeJS 和 ChartJS 将图形直接渲染到文件中,效果很好。

我通过安装ChartjsNodeCanvas npm 模块来完成。

为了在图表上显示标签,我使用官方 ChartJS 插件ChartJS-plugin-datalabels

但似乎 Canvas 模块有不同的激活 ChartJS 插件的方案,很可能我错误地激活了 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)        
})();

图表已显示,但图表上没有标签。

【问题讨论】:

    标签: node.js canvas plugins chart.js html2canvas


    【解决方案1】:

    这是使用 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
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 2022-08-08
      • 1970-01-01
      • 2022-11-05
      • 2019-08-03
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多