Line ChartJS空/空值不会破坏该行

Yva*_*van 3 javascript null break chart.js

当值为null或为空时,我想打破图表的行,但我不能.也许我想念一些东西?

var data = {
    labels: ["January", "February", "March", "April", "May", "June", "July"],
    datasets: [ {
        label: "My First dataset",
        fillColor: "rgba(220,220,220,0.5)",
        strokeColor: "rgba(220,220,220,0.8)",
        highlightFill: "rgba(220,220,220,0.75)",
        highlightStroke: "rgba(220,220,220,1)",
        data: [65, null, 80, 81, 56, 55, 40]
    }, {
        label: "My Second dataset",
        fillColor: "rgba(151,187,205,0.5)",
        strokeColor: "rgba(151,187,205,0.8)",
        highlightFill: "rgba(151,187,205,0.75)",
        highlightStroke: "rgba(151,187,205,1)",
        data: [28, 48, null, 19, null, 27, 90]
    } ]
};
Run Code Online (Sandbox Code Playgroud)

这是代码:http://jsfiddle.net/YvanBarbaria/sLgefm04/31/

pot*_*ngs 9

Chart.js不直接支持这一点.

  1. 您必须禁用默认的段图和
  2. 写自己的

对于1.,将笔触宽度设置为0不起作用,因为画布忽略0(和NaN,未定义...),因此您将其设置为一个非常小的值以使该行不可见(有一个datasetStroke选项,但有是没有代码作用于它)

同样禁用填充也是合乎逻辑的.但是,在关闭数据集填充的情况下,点会填充黑色(Chart.js bug?),因此通过减小半径和增加笔触宽度使点变为实心.

var myLineChart = new Chart(ctx).LineAlt(data, {
    datasetStrokeWidth: 0.01,
    datasetFill: false,
    pointDotRadius : 2,
    pointDotStrokeWidth: 3
});
Run Code Online (Sandbox Code Playgroud)

请注意,类型是LineAlt - 这是您如何处理2. - 通过扩展折线图类型

Chart.types.Line.extend({
    name: "LineAlt",
    draw: function () {
        Chart.types.Line.prototype.draw.apply(this, arguments);

        // now draw the segments
        var ctx = this.chart.ctx
        this.datasets.forEach(function (dataset) {
            ctx.strokeStyle = dataset.strokeColor

            var previousPoint = {
                value: null
            };
            dataset.points.forEach(function (point) {
                if (previousPoint.value !== null && point.value !== null) {
                    ctx.beginPath();
                    ctx.moveTo(previousPoint.x, previousPoint.y);
                    ctx.lineTo(point.x, point.y);
                    ctx.stroke();
                }
                previousPoint = point;
            })
        })
    }
});
Run Code Online (Sandbox Code Playgroud)

小提琴 - http://jsfiddle.net/sLgefm04/66/


hen*_*non 5

也许这在 2015 年不可用,但现在折线图有一个样式选项spanGaps,如果为真,将在没有或空数据的点之间绘制线条。如果为 false,具有 NaN 数据的点将在线条中创建中断。