更改 d3 旭日图的 json 标签
Changing labels of json for d3 sunburst diagram
我正在尝试使用旭日图中的 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},
但在示例中,标签是名称,children 和大小
在这个 post 的帮助下,我正在使用地图(函数)将标签更改为所需的标签,如 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 中的 "values" 大小更改为 "children" ,如此处
{"name":"KINGDOM","children":[{"name":"Animalia","children":[{"name":"Chordata","children":[{"name":"undefined","children":[{"name":"Chiroptera","children":[{"name":"Vespertilionidae","children":[{"name":"Myotis","children":496},
因此,我正在寻找一些建议,以便我可以将引用计数的 "children" 更改为不同的内容,然后我可以将其映射到我的可视化代码中。
问题已解决,我必须删除数据文件和引用数据文件的评论
当你说的时候,我不确定我是否能够正确回答你的问题
我正在尝试为尺码值获取不同的标签,而不是儿童:
但这是我尝试给每个节点 count 并用它来绘制弧线:
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
}
}
点击计数单选按钮。
我正在尝试使用旭日图中的 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},
但在示例中,标签是名称,children 和大小
在这个 post 的帮助下,我正在使用地图(函数)将标签更改为所需的标签,如 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 中的 "values" 大小更改为 "children" ,如此处
{"name":"KINGDOM","children":[{"name":"Animalia","children":[{"name":"Chordata","children":[{"name":"undefined","children":[{"name":"Chiroptera","children":[{"name":"Vespertilionidae","children":[{"name":"Myotis","children":496},
因此,我正在寻找一些建议,以便我可以将引用计数的 "children" 更改为不同的内容,然后我可以将其映射到我的可视化代码中。
问题已解决,我必须删除数据文件和引用数据文件的评论
当你说的时候,我不确定我是否能够正确回答你的问题 我正在尝试为尺码值获取不同的标签,而不是儿童:
但这是我尝试给每个节点 count 并用它来绘制弧线:
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
}
}
点击计数单选按钮。