【发布时间】:2014-02-25 16:39:03
【问题描述】:
我有一个带有简单“类型”“计数”内容的 tsv 文件,如下所示:
type count
level1/level2/level3/Foo 24
level1/level2/level3/Bar 2
level1/level2/Baz 28
level1/level2/Quz 3
...
level 字符串可以是任何字符串,我在这里只是这样命名它们,以传达含义。该类型的最后一个元素Foo、Bar等可以认为是数据的叶子。
使用 d3,我想把它变成一个旭日形图。为此,我使用d3.nest 函数在斜线处分解类型。
d3.tsv("data.tsv", function(error, data) {
data.forEach(function(d) {
d.count = +d.count;
});
// define key functions for a depth up to 4
var nestedData = d3.nest()
.key(function(d) { return level(d.type, 2); })
.key(function(d) { return level(d.type, 3); })
.key(function(d) { return level(d.type, 4); })
.entries(data);
// create the key for a specified level
function level(type, l) {
var parts = type.split("/");
var result = "";
for (i = 0; i < l && i < parts.length; i++) {
result += parts[i];
if (i < l-1 && i < parts.length-1) {
result += "/";
}
}
return result;
}
...
这里的问题是生成的nestedData 的条目/叶子总是深度为 4。在示例数据中,您可以看到叶子可以处于任何深度。
如何构造嵌套数据,以便条目可以出现在任何深度,而不仅仅是在预定义的深度?
【问题讨论】:
标签: javascript d3.js sunburst-diagram