簡體   English   中英

繪制多個chart.js圖表​​(nodejs)

[英]Drawing multiple chart.js charts (nodejs)

我正在實現一個后端應用程序,該應用程序使用chart.js庫創建多個圖表,然后將其存儲為PNG格式。 我正在為在for循環中創建多個圖表而解決一個問題。 在for循環內,應用程序首先創建一個新圖表,然后設置其屬性,然后調用createChart()函數繪制該圖表。 該過程完成后,我將調用chartNode.destroy()來清理新圖表的所有引用。

我原本希望繪制12個不同的圖表,但是卻繪制了12個相同的圖表。 應用程序僅繪制一個圖表,該圖表位於textData.charts數組的最后一個索引處。

任何意見,將不勝感激。

function createCharts() {
  let i = 0;
  textData.charts.forEach(graf => {
    const chartNode = new ChartjsNode(600, 600);
    setChartProperties(graf, dataResult[i]);
    createChart(graf, chartNode).then(() => {
        chartNode.destroy();
    });
    i++;
  })
}

function createChart(graf, chartNode) {
    return chartNode.drawChart(graph).then(() => {
      return chartNode.getImageBuffer('image/png');
    }).then(buffer => {
      Array.isArray(buffer)
      return chartNode.getImageStream('image/png');
    }).then(streamResult => {
      streamResult.stream
      streamResult.length
      return chartNode.writeImageToFile('image/png', './results/' + graf.filename);
    });
}

 function setChartProperties(graf, data) { graph.data.datasets[0].data = data; graph.options.title.text = graf.name; graph.data.labels = graf.labels; graph.data.datasets[1].data = graf.limits; graph.data.datasets[2].data = graf.limits; graph.data.datasets[1].backgroundColor = graf.color1; graph.data.datasets[2].backgroundColor = graf.color2; graph.data.datasets[1].borderColor = graf.color1; graph.data.datasets[2].borderColor = graf.color2; graph.data.datasets[1].label = graf.label1; graph.data.datasets[2].label = graf.label2; } 

你可以用一個淺拷貝試圖graph每個圖表構造。 如果那不起作用,請告訴我,我們將嘗試其他方法。

我添加了稱為graph參數,以使更改的內容盡可能少。

function createCharts() {
  let i = 0;
  textData.charts.forEach(graf => {
    const chartNode = new ChartjsNode(600, 600);
    const chartGraph = Object.assign({}, graph);
    setChartProperties(chartGraph, graf, dataResult[i]);
    createChart(chartGraph, graf, chartNode).then(() => {
        chartNode.destroy();
    });
    i++;
  })
}

function createChart(graph, graf, chartNode) {
    return chartNode.drawChart(graph).then(() => {
      return chartNode.getImageBuffer('image/png');
    }).then(buffer => {
      Array.isArray(buffer)
      return chartNode.getImageStream('image/png');
    }).then(streamResult => {
      streamResult.stream
      streamResult.length
      return chartNode.writeImageToFile('image/png', './results/' + graf.filename);
    });
}

function setChartProperties(graph, graf, data) {
  graph.data.datasets[0].data = data;
  graph.options.title.text = graf.name;
  graph.data.labels = graf.labels;
  graph.data.datasets[1].data = graf.limits;
  graph.data.datasets[2].data = graf.limits;
  graph.data.datasets[1].backgroundColor = graf.color1;
  graph.data.datasets[2].backgroundColor = graf.color2;
  graph.data.datasets[1].borderColor = graf.color1;
  graph.data.datasets[2].borderColor = graf.color2;
  graph.data.datasets[1].label = graf.label1;
  graph.data.datasets[2].label = graf.label2;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM