我正在使用chart.js,并且在我的图表中的某些点上,我在多天条目之间有一些缺失的数据.我已将这些值指定为null,但希望图表在缺失点之间绘制连接线.这是我有的:
有没有办法连接chart.js中的点?或者也许有人可以指向我可以的图表库.谢谢.
Sel*_*lay 32
新版本支持跳过丢失的数据.您可以在选项中设置spanGaps:true.然后,如果您有缺失数据的null或NaN,它将跳过它并连接到下一个点.
.....
showTooltips: true,
options: {
spanGaps: true,
......
Run Code Online (Sandbox Code Playgroud)
小智 10
对于 charts.js v2,您只需在数据集中定义它:
var data = {
labels: labels,
datasets: [ {
backgroundColor: "#94b5c244",
borderColor: "#94b5c2",
data: data,
label: "AAPL",
spanGaps: true
}]
};
Run Code Online (Sandbox Code Playgroud)
我有同样的问题,我已经修改了这个版本:
var lastPoint = null;
helpers.each(dataset.points, function (point, index) {
if (!point.ignore && dataset.skipNullValues && lastPoint) {
ctx.beginPath();
ctx.moveTo(lastPoint.x, lastPoint.y);
if (this.options.bezierCurve) {
ctx.bezierCurveTo(
lastPoint.controlPoints.outer.x,
lastPoint.controlPoints.outer.y,
point.controlPoints.inner.x,
point.controlPoints.inner.y,
point.x,
point.y
);
} else {
ctx.lineTo(point.x, point.y);
}
ctx.stroke();
}
if (index > 0 && !dataset.points[index - 1].ignore && !point.ignore) {
if (this.options.bezierCurve) {
ctx.bezierCurveTo(
dataset.points[index - 1].controlPoints.outer.x,
dataset.points[index - 1].controlPoints.outer.y,
point.controlPoints.inner.x,
point.controlPoints.inner.y,
point.x,
point.y
);
}
else {
ctx.lineTo(point.x, point.y);
}
lastPoint = point;
}
else if (index === 0 || !point.ignore) {
ctx.moveTo(point.x, point.y);
if (!point.ignore) {
lastPoint = point;
}
}
}, this);
Run Code Online (Sandbox Code Playgroud)
为了更好的结构,我为数据集设置了一个名为"skipNullValues"的属性:
var datasetObject = {
label: dataset.label || null,
fillColor: dataset.fillColor,
strokeColor: dataset.strokeColor,
pointColor: dataset.pointColor,
pointStrokeColor: dataset.pointStrokeColor,
tooltip: dataset.tooltip,
line: dataset.line,
fill: dataset.fill,
points: [],
skipNullValues: dataset.skipNullValues
};
Run Code Online (Sandbox Code Playgroud)
这是完整的工作版本!
也许有一个更好的解决方案,但对我的用途它是有效的.
如果它适合您,请告诉我!