使用 D3 的实时数据

Posted

技术标签:

【中文标题】使用 D3 的实时数据【英文标题】:Real-time data with D3 【发布时间】:2012-12-02 18:44:15 【问题描述】:

我想知道是否可以将 D3 库与我的服务器将通过 websockets 发送的实时数据一起使用。我看不到任何证明这一点的文档或示例。我最初的期望是通过以下代码示例来做到这一点:

ws = new WebSocket(ws://localhost:8888/ma");   
some more code....

  ws.onmessage = function(evt) 
        d3.json("evt.data", function(json) 
......    
.......More code.....
......
 

但这似乎不起作用,但我知道客户端通过检查控制台日志接收数据。

此外,还有一个递归函数可以展平 JSON 文档:

// Returns a flattened hierarchy containing all leaf nodes under the root.
function classes(root) 
var classes = [];

function recurse(name, node) 
  if (node.children) node.children.forEach(function(child)  recurse(node.name, child);    );
  else classes.push(packageName: name, className: node.name, value: node.size);
  

  recurse(null, root);
  return children: classes;   


     console.log(evt.data);
  ;

  ws.onclose = function (evt) 
       alert("Connection terminated");

  );
 );

如果我的 JSON 文档已经是扁平的,那么我认为不需要它,即:

ID: 1, Name: 'my name', age: 65, car: 'Ford'

D3 对我来说是全新的,因此我们将不胜感激。

谢谢

【问题讨论】:

您能重新格式化代码吗?第二个代码块对我来说毫无意义…… 相关:***.com/questions/13591891/… @filmor 该函数来自 D3 代码示例:github.com/mbostock/d3/blob/master/examples/bubble/bubble.js。如果原始 JSON 文档是嵌套的,我认为它用于“扁平化”JSON 结构。 @RossHamish,我也提出了这个问题。我希望这是一种更简单的询问方式,因为实时获取数据似乎是我的主要问题。 【参考方案1】:

我还没有在 D3 中使用过 websockets,但看起来您希望 d3.json 成为 JSON 解析器。它不是 - 它是一个 AJAX 加载器,它委托给 JSON.parse 进行解析。所以你可能想要这样的东西:

var ws = new WebSocket("ws://localhost:8888/ma");

var data = [];

ws.onmessage = function(evt) 
    // append new data from the socket
    data.push(JSON.parse(evt.data));
    update();
;

// now use the standard join pattern to deal with updates
function update() 
    var chunk = d3.selectAll('p')
        .data(data);

    // entry might be all you need, if you're always appending
    chunk.enter().append('p')
        .text(function(d)  return d; );


【讨论】:

谢谢,我看看这个,明天早上试试。

以上是关于使用 D3 的实时数据的主要内容,如果未能解决你的问题,请参考以下文章

D3.JS 具有实时数据、平移和缩放的时间序列折线图

d3.js带圆圈的实时折线图

前端/h5 D3.js实现根据数据动态更新图形/类似进度实时变化效果

通过 socket.io 更新实时 d3 图表

带有 nvd3.js 的实时线图

react-native & d3 选择库