【问题标题】:d3 — Progressively draw a large datasetd3 — 逐步绘制大型数据集
【发布时间】:2013-10-12 23:17:23
【问题描述】:

我正在使用 d3.js 将 80,000 行 .tsv 的内容绘制到图表上。

我遇到的问题是,由于数据太多,页面在大约 5 秒内变得无响应,而整个数据集同时被搅动。

如果数据分布在较长时间段内,是否有一种简单的方法可以逐步处理数据? 理想情况下,页面将保持响应状态,并且数据将在可用时绘制,而不是在最后一次大命中

【问题讨论】:

  • 我不完全确定您的意思,但答案几乎可以肯定是否定的——没有简单(或内置)的方法可以做到这一点。您必须自己控制渲染。
  • 我自己也问过类似的问题。这取决于您的用例。您可以分块检索数据,或者在将数据加载到客户端之前在服务器上将数据预处理为较小的集合。

标签: javascript svg d3.js data-visualization


【解决方案1】:

我认为您必须将数据分块并使用 setInterval 或 setTimeout 分组显示。这将给 UI 一些喘息的空间来跳到中间。

基本方法是: 1) 分块数据集 2) 分别渲染每个块 3) 跟踪每个渲染组

这是一个例子:

var dataPool = chunkArray(data,100);
function updateVisualization() {
    group = canvas.append("g").selectAll("circle")
    .data(dataPool[poolPosition])
    .enter()
    .append("circle")
    /* ... presentation stuff .... */

}

iterator = setInterval(updateVisualization,100);

你可以在这里看到一个演示小提琴——在我喝咖啡之前完成——在这里:

http://jsfiddle.net/thudfactor/R42uQ/

请注意,我正在为每个数组块创建一个具有自己的数据连接的新组。如果您随着时间的推移继续添加到相同的数据连接( data(oldData.concat(nextChunk) ),即使您只使用 enter() 选择,整个数据集仍会得到处理和比较,因此不需要渴望东西开始爬行。

【讨论】:

  • 你能提供一个渲染大topojson的例子吗代表这样的地图:1-获取每50个区域并渲染它们而不需要等待整个区域(json对象)被渲染。这是一个大问题。你的解决方案是否符合我的目的?
猜你喜欢
  • 1970-01-01
  • 2018-12-14
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
相关资源
最近更新 更多