我是Chart.js的新手,也没有编写javascript的经验。我目前已经编写了一个4行图表,但我想让代码更动态一点,这样如果输入的数据发生变化(比如出现了第5个类别),JS代码就可以接收到,而不必重写。
Chart.js代码和html
const ctx = document.getElementById('myChart');
const data = JSONinput;
new Chart(
ctx,
{
type: 'line',
data: {
labels: data.map(row => row.DataPoints.map(p => p.LogDate))[0],
datasets: [
{
label: data.map(row => row.Name)[0],
data: data.map(row => row.DataPoints)[0].map(k => k.Score)
},
{
label: data.map(row => row.Name)[1],
data: data.map(row => row.DataPoints)[1].map(k => k.Score)
},
{
label: data.map(row => row.Name)[2],
data: data.map(row => row.DataPoints)[2].map(k => k.Score)
},
{
label: data.map(row => row.Name)[3],
data: data.map(row => row.DataPoints)[3].map(k => k.Score)
}
]
}
};
<div>
<canvas id="myChart"></canvas>
</div>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
JSON输入
[
{
"Name": "Red",
"DataPoints": [
{
"LogDate": "2023-02-19T13:07:13.643",
"Score": 478.5
},
{
"LogDate": "2023-03-01T23:13:04.45",
"Score": 594.0
}
]
},
{
"Name": "Blue",
"DataPoints": [
{
"LogDate": "2023-02-19T13:07:13.643",
"Score": 546.5
},
{
"LogDate": "2023-03-01T23:13:04.45",
"Score": 657.0
}
]
},
{
"Name": "Green",
"DataPoints": [
{
"LogDate": "2023-02-19T13:07:13.643",
"Score": 687.0
},
{
"LogDate": "2023-03-01T23:13:04.45",
"Score": 757.0
}
]
},
{
"Name": "Purple",
"DataPoints": [
{
"LogDate": "2023-02-19T13:07:13.643",
"Score": 518.0
},
{
"LogDate": "2023-03-01T23:13:04.45",
"Score": 668.0
}
]
}
]
另外,如果有一种缩短日期时间的方法,使它只显示日期组件,那么这将是伟大的太,谢谢。
1条答案
按热度按时间3bygqnnd1#
假设你的
data
和你想要的dataset
一样长,你可以这样做;传递到图表中的数据最终显示为: