到目前为止,我已经找到了两个图表库,它们能够顺利处理 100k 点的数据集。(即使平移和缩放)
PlotlyJS
我惊讶地发现Plotly.js在 SVG 模式下能够轻松处理 100k 点,实时平移和缩放:https ://codepen.io/Venryx/pen/eYzpEzN
Demo的核心代码如下:
const line = {
x: [],
y: [],
// uncomment this line to disable the data simplify/decimate optimization
//line: {simplify: false},
// use 'scattergl' for WebGL renderer; though this seems to break updates to data
type: 'scatter',
};
updateData(1000);
function updateData(yRange) {
line.x = [];
line.y = [];
for (var i = 0; i < 100000; i++) {
line.x.push(i);
line.y.push(Math.sin(i / 500) * yRange);
}
// if calling a second time, add code here to update the chart (see demo)
}
Plotly.newPlot('graph', [line]);
有一些基于 WebGL 的图表库具有更好的原始性能(即预数据抽取),例如webgl-plot和TimeChart;然而,因为 Plotly.js 带有一个花哨的数据抽取/简化选项,它最终提供了相当的性能。(并且比那些 WebGL 库的限制更少——例如,svg-mode Plotly 允许您在初始渲染后添加和编辑数据条目)
uPlot
uPlot是我发现的第二个图表库,可以轻松绘制 100k+ 数据集。
随着点数超过 100 万大关,它实际上甚至开始超过 Plotly 的响应能力。(尤其适用于使用“扩展数据”按钮进行缩放和添加/修改数据)
演示(旨在与上面的 Plotly 相匹配):https ://codepen.io/Venryx/pen/qBNOoYO
(uPlot 现在是我为具有超大数据集(即 100 万+)的图表选择的库。)