c3.js 中的增量散点图

Incremental scatter plot in c3.js

我需要使用 c3.js 在散点图中显示数据点。数据点成批到达,我想随着新点的到达逐步更新绘图。

第一批在初始化绘图时给出,显示正常。但是当我使用流程更新情节时,较早的点会被删除。此外,X 轴不显示正确的 X 坐标。 [编辑:添加说明] 流程之后,点出现在 (3, 1), (4, 1), (5, 1) 而不是 (1.5, 1), (2.5, 1), (3.5, 1)如数据中指定的那样。]

我是不是漏掉了什么?

JsFiddle:http://jsfiddle.net/cornea/b33usb69/

var chart = c3.generate({
    data: {
        x: 'A',
        columns: [
            ['A', 1.5, 2.5, 3.5],
            ['B', 2.0, 2.0, 2.0]
        ],
        type: 'scatter',
        types: { 'B': 'scatter' }
    },
    axis: {
        x: { label: 'A', tick: { fit: true } },
        y: { label: 'B' }
    }
});

setTimeout(function () {
    chart.flow({
        columns: [
            ['A', 1.5, 2.5, 3.5],
            ['B', 1.0, 1.0, 1.0]
        ]
    });
}, 2000);

谢谢。

因为您的示例中 Y 轴的比例变化很大(值下降 50%),您可能需要设置 axis: { y: { min: 0 }, y: { max: 2 } } 才能看到散点移动。尝试 this jsfiddle 看看该更改是否符合您的要求。

当您使用 chart.flow 时,X 轴值会更新,如果您更改它以使用 chart.load({ ... }) 加载和重新加载图表数据,它们将保持不变。要让图表正确地流动数据,还需要做一些更多的工作来初始化 X 轴值(请参阅 flow API example),但从您的简单示例中并不清楚这就是您想要做的。


编辑:

感谢您的澄清。我无法用工作代码回答你的问题,但看到 github #865 issue for C3.js 与你的问题相关。

您可能需要考虑对数据使用不同的方法并避免 flow 以构建合适的图表。

不确定为什么要使用 .flow,这不是更适合时间序列数据吗?

您不能只使用 .load 将新数据点添加到图表上吗?

像这样:http://jsfiddle.net/b33usb69/20/

编辑:

如果你想把它放在同一个数组中,那么像这样: (代码未经测试)

var a = ['A_x', 1.5, 2.5, 3.5], b = ['A', 2.0, 2.0, 2.0];

var chart = c3.generate({
    data: {
        xs: { A: 'A_x' },
        columns: [
             ['A_x', 1.5, 2.5, 3.5],
            ['A', 2.0, 2.0, 2.0]
        ],
        type: 'scatter'
    },
    axis: {
        y: { min: 0, max: 3 }
    }
});

setTimeout(function () {
    a = a.concat[1.5, 2.5, 3.5];
    b = b.concat[1.0, 1.0, 1.0];
    chart.load({
        columns: [
            a,
            b
        ]
    });
}, 2000);