Csv 可折叠树层次结构d3

Csv 可折叠树层次结构d3,csv,d3.js,tree,Csv,D3.js,Tree,据称,d3不从AT获取任何特定数据,无论是json还是csv。但我注意到了一些奇怪的行为 在本例中,输入文件是json so d3.json("/d/4063550/flare.json", function(error, flare) { root = flare; root.x0 = height / 2; root.y0 = 0; function collapse(d) { if (d.children) { d._children = d.chi

据称,d3不从AT获取任何特定数据,无论是json还是csv。但我注意到了一些奇怪的行为

在本例中,输入文件是json so

 d3.json("/d/4063550/flare.json", function(error, flare) {
  root = flare;
  root.x0 = height / 2;
  root.y0 = 0;

  function collapse(d) {
    if (d.children) {
      d._children = d.children;
      d._children.forEach(collapse);
      d.children = null;
    }
  }

  root.children.forEach(collapse); //?
  update(root);
});
在这种情况下,加载的是csv文件

d3.csv("FederalBudget_2013_a.csv", function(csv) {
        var data=[];
        //Remove all zero values nodes
        csv.forEach(function (d) {
            var t=0;
            for (var i=0; i < sumFields.length; i++) {
                t+= Number(d[sumFields[i]]);
            }
            if (t > 0) {
                data.push(d);
            }
        })
        var nest = d3.nest()
                .key(function(d) { return d.Level1; })
                .key(function(d) { return d.Level2; })
                .key(function(d) { return d.Level3; })
                .entries(data);

        root={};
        root.values=nest;
        root.x0 = h / 2;
        root.y0 = 0;

        var nodes = tree.nodes(root).reverse(); //?
        tree.children(function (d){ return d.children;}); //?
        update(root);
});
d3.csv(“联邦预算”\u 2013\u a.csv),函数(csv){
var数据=[];
//删除所有零值节点
csv.forEach(函数(d){
var t=0;
对于(var i=0;i0){
数据推送(d);
}
})
var nest=d3.nest()
.key(函数(d){返回d.Level1;})
.key(函数(d){返回d.Level2;})
.key(函数(d){返回d.Level3;})
.条目(数据);
根={};
root.values=nest;
root.x0=h/2;
root.y0=0;
var nodes=tree.nodes(root.reverse();/?
tree.children(函数(d){return d.children;});/?
更新(根);
});
请澄清为什么我在提问时采用了不同的方法。我试图在第二个例子中看到孩子们,但没有结果。
谢谢。

诚然,d3可以使用多种数据格式,但您提供的示例正试图做一些不同的事情,因为所提供的每种数据类型都是以不同的方式配置的

第一个示例中的json文件是在一个层次结构中配置的,该层次结构表示树图可以直接使用的数据类型,但csv数据是“平面”的,因为它没有形成树形式的父/子关系的排列。 例如,下面是一个“平面”数据结构,其中一系列命名节点都有一个父节点

name,parent    
"Level 2: A","Top Level"
"Top Level", "null" 
"Son of A","Level 2: A"
"Daughter of A","Level 2: A"
"Level 2: B","Top Level"
以下是使用层次结构中表示的关系编码的相同数据(作为json等价物)

等效图形如下所示:


在BrightPoint示例中,使用
d3.nest()
函数获取平面CSV数据,并基于
.key
值(在本例中为平面CSV数据中的列名)创建层次结构,了解输入类型和一些其他实现可能很有用这是创建子对象的地方


理想情况下,您的后端服务可以创建JSON格式的数据,但通常您必须操作数据客户端,将其转换为可消化的格式。

感谢您的回复!我使用你的博客相当多的了解,它是非常有用的!似乎(为了让生活更轻松),我们应该尝试在JSON父/子继承权中格式化数据,而不是使用csv?除了Brightpoint示例之外,我还没有看到太多关于csv和树层次结构的文档。理想情况下,如果可能的话,json是值得的,但有时我们没有选择:-)。如果答案合适,不要忘记接受它:-)。
[
  {
    "name": "Top Level",
    "parent": "null",
    "children": [
      {
        "name": "Level 2: A",
        "parent": "Top Level",
        "children": [
          {
            "name": "Son of A",
            "parent": "Level 2: A"
          },
          {
            "name": "Daughter of A",
            "parent": "Level 2: A"
          }
       ]
    },
    {
      "name": "Level 2: B",
      "parent": "Top Level"
    }
  ]
}
]