javascript - 如何转换为 D3 的 JSON 格式?

标签 javascript json graph d3.js tree

虽然遵循大量 D3 示例,但数据通常以 flare.json 中给出的格式进行格式化。 :

{
 "name": "flare",
 "children": [
  {
   "name": "analytics",
   "children": [
    {
     "name": "cluster",
     "children": [
      {"name": "AgglomerativeCluster", "size": 3938},
      :

我有一个邻接列表如下:

A1 A2
A2 A3
A2 A4

我想转换成上述格式。目前,我正在服务器端执行此操作,但有没有办法使用 d3 的功能来实现这一点?我找到了一个 here ,但该方法似乎需要修改 d3 核心库,由于可维护性,我不赞成。有什么建议吗?

最佳答案

没有规定的格式,因为您通常可以通过各种访问器函数(例如 hierarchy.children )和 array.map 重新定义数据.但是您引用的格式可能是树最方便的表示,因为它适用于默认访问器。

第一个问题是您是否打算显示 graphtree .对于图,数据结构是根据 nodes 定义的。和 links .对于树,布局的输入是根节点,它可能有一个数组 child nodes ,并且其叶节点具有关联的 value .

如果你想显示一个图表,而你所拥有的只是一个边列表,那么你需要遍历边以生成一个节点数组和一个链接。假设您有一个名为“graph.csv”的文件:

source,target
A1,A2
A2,A3
A2,A4

您可以使用 d3.csv 加载此文件然后产生一个节点和链接数组:

d3.csv("graph.csv", function(links) {
  var nodesByName = {};

  // Create nodes for each unique source and target.
  links.forEach(function(link) {
    link.source = nodeByName(link.source);
    link.target = nodeByName(link.target);
  });

  // Extract the array of nodes from the map by name.
  var nodes = d3.values(nodeByName);

  function nodeByName(name) {
    return nodesByName[name] || (nodesByName[name] = {name: name});
  }
});

然后您可以将这些节点和链接传递给力布局以可视化图表:

如果您想生成一个,那么您需要进行稍微不同形式的数据转换来为每个父节点累积子节点。

d3.csv("graph.csv", function(links) {
  var nodesByName = {};

  // Create nodes for each unique source and target.
  links.forEach(function(link) {
    var parent = link.source = nodeByName(link.source),
        child = link.target = nodeByName(link.target);
    if (parent.children) parent.children.push(child);
    else parent.children = [child];
  });

  // Extract the root node.
  var root = links[0].source;

  function nodeByName(name) {
    return nodesByName[name] || (nodesByName[name] = {name: name});
  }
});

像这样:

关于javascript - 如何转换为 D3 的 JSON 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11088303/

相关文章:

C图。无法将边添加到邻接表中

performance - 提高可视化重叠段的性能

javascript - 为什么我们在JavaScript中多次运行时需要清除动画?

c# - Travian 更改村庄名称给 'Invalid Token' 与 webrequests

javascript - 从 java bean 初始化 json 对象

java - Jackson - 反序列化期间不允许对象属性和数组元素为 null

javascript - 在 Javascript 中使用空格拆分字符串?

javascript - 什么情况下我们需要在javascript中实现单例类

Javascript apply——继承类

algorithm - "flood problem?"是否有任何有效的算法