为d3森伯斯特图更改json的标签

时间:2016-01-31 21:59:27

标签: javascript json d3.js sunburst-diagram

我正在尝试使用sunburst图中的code来处理我的数据。最初我的数据来自csv,我已经在d3.nest()

的帮助下转换为json
   d3.csv("chord.csv", function(error,csv_data){
         var sunData1 = {"key": "KINGDOM", "values": d3.nest()
        .key(function(d) { return d.KINGDOM; })
        .key(function(d) { return d.PHYLUM; })
        .key(function(d) { return d.CCLASS; })
        .key(function(d) { return d.ORDER; })
        .key(function(d) { return d.FAMILY; })
        .key(function(d) { return d.GENUS; })
        .rollup(function(v) {return  v.length;})
        .entries(csv_data) 
        }; 

这给了我像

这样的标签
[{"key":"Animalia","values":[{"key":"Chordata","values":[{"key":"Mammalia","values":[{"key":"Chiroptera","values":[{"key":"Vespertilionidae","values":[{"key":"Myotis","values":496},

但在示例中,标签是名称,子项和大小

post的帮助下,我使用map(函数)将标签更改为所需的格式,如flare.json中所示。代码就在这里

        var sunData2 = {"name":"KINGDOM", "children": sunData1.values.map(function (kingdom){
                return {"name":kingdom.key,  "children": kingdom.values.map(function(phylum){
                   return {"name":phylum.key, "children": phylum.values.map(function(cclass){
                       return{"name":cclass.key, "children": cclass.values.map(function(order){
                           return {"name":order.key, "children": order.values.map(function(family){
                               return {"name":family.key, "children": family.values.map(function(genus){
                                  return {"name":genus.key, "children": genus.values};
                               })};
                           })};
                       })};
                   })};     
                })};
        })};

现在,我可以将其更改为所需的格式,但现在它正在改变大小,即"值"在我的json进入"孩子"喜欢这里

 {"name":"KINGDOM","children":[{"name":"Animalia","children":[{"name":"Chordata","children":[{"name":"undefined","children":[{"name":"Chiroptera","children":[{"name":"Vespertilionidae","children":[{"name":"Myotis","children":496},

所以,我正在寻找一些建议,以便我可以改变孩子们的#34;将计数指向不同的东西,然后我可以在我的可视化代码中映射。

问题已解决,我必须删除引用数据文件的数据文件和注释

1 个答案:

答案 0 :(得分:1)

当你说时,我不确定我是否能够正确地回答你的问题 我正在尝试为尺寸值而不是儿童设置不同的标签

但这是我尝试为每个节点提供计数并用它来绘制弧线:

function makeSize(json){
  if (json.children instanceof Array){
    json.count = json.children.length;//if array make it count equal to child count
    json.children.forEach(function(d){
      makeSize(d);//call recursive for all children
    });
  } else {
    if (isFinite(json.children))
      json.count = json.children;//if number store that in the count
    else
      json.count = 0;//if nothing make the count 0
  }
}

点击统计收音机。