ChartJS 如何创建具有两个不同标签的DataSeries的图表?

gcxthw6b  于 2023-05-17  发布在  Chart.js
关注(0)|答案(1)|浏览(223)

我想在ChartJS中创建一个线性图表,其中包含两个具有不同标签的DataSeries。
例如,有两个数据集:

DataSet_1 = {'2020': 6, '2021': 8, '2022': 10}
DataSet_2 = {'2017': 5, '2019': 4, '2020': 9, '2022': 11}**

所以标签(X轴)是['2017', '2019', '2020', '2021', '2022']--我可以将它们作为列表传递,但我不知道如何在ChartJS脚本中使用它们。

vd8tlhqk

vd8tlhqk1#

这可能不是最优雅的解决方案,但您可以:
1.创建标签,通过将它们收集在一起(使用 “集合转换” 删除重复项)
1.转换数据集以定义图表中的值/位置
1.设置属性spanGaps以避免间隙。

这里有一个简短的演示与提供的数据:

let DataSet_1 = {'2020': 6, '2021': 8, '2022': 10}
let DataSet_2 = {'2017': 5, '2019': 4, '2020': 9, '2022': 11}

// creates, lables, remove duplicates,
let labels =  [...new Set([ ...Object.keys(DataSet_1), ...Object.keys(DataSet_2) ])]
  .sort()

let converted_1 = labels.map( key => ({ x: key, y: DataSet_1[key]}));
let converted_2 = labels.map( key => ({ x: key, y: DataSet_2[key]}));

var options = {
    type: 'line',
    data: {
        datasets: [{
            type: 'line',
            label: 'DataSet_1',
            data: converted_1
        }, {
            type: 'line',
            label: 'DataSet_2',
            data: converted_2,
        }],
        labels: labels
    },
    maintainAspectRatio: false,
    legend: { display: false },
    options: {
        spanGaps: true,
    }
}

const chart = document.getElementById('chart1')
new Chart(chart, options);
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<div style="width:500px;height:184px">
   <canvas id="chart1" width="500" height="184"></canvas>
<div>

相关问题