我想在ChartJS中创建一个图表,显示一段时间内的进度。在我的数据库中,我只有进度更改日期的值和日期。比如说
"progress": {
"07.02.2020": 0,
"29.02.2020": 1,
"07.04.2020": 2,
"07.05.2020": 3,
"07.07.2020": 4,
"07.08.2020": 5,
"07.09.2020": 6,
"07.11.2020": 7,
"07.12.2020": 8,
"07.01.2021": 9,
"07.02.2022": 10,
"30.02.2022": 11
}
我使用这个脚本为2020年2月7日到2022年2月30日之间的每个日期添加标签:
function addDatesToChart(startDate, endDate) {
const currentDate = new Date(startDate.getTime());
console.log(currentDate);
while (currentDate <= endDate) {
chartData3.labels.push(new Date(currentDate).toLocaleDateString("et-EE", {year: "numeric", month: "2-digit", day: "2-digit"}));
currentDate.setDate(currentDate.getDate() + 1);
}
}
然后,我使用此脚本将进度值添加到图表中,并使用最后一个进度条目中的值填充空白:
let lastGivenProgress = 0;
let lastGivenProgressIndex = 0;
for (let i = 0; i < chartData.labels.length; i++) {
if (!(Object.keys(progress).includes(chartData.labels[i]))) {
chartData.datasets[0].data.push(lastGivenProgress);
}
else {
chartData.datasets[0].data.push(Object.values(data)[lastGivenProgressIndex++]);
lastGivenProgress = Object.values(progress)[lastGivenProgressIndex];
}
}
问题是,我希望线条具有张力,但如果所有标签都有值,则无法使用该张力,因此线条呈锯齿状:
我想知道是否有一种方法可以只添加某些索引处的值,而将其他标签留空,以便在进度发生变化的点之间绘制线条?所以就像这张图中的红线一样(抱歉我画得很糟糕):
也许你有其他的建议,一个不同的方法,我还没有想到?
1条答案
按热度按时间brjng4g31#
你试过使用
spanGaps
选项吗?如果不设置任何Y值,除了取得进展的地方,点之间应该有间隙。根据chartjs文档,使用这个,它应该在带有数据的点之间绘制线条,例如: