我有一个带有简单“类型”“计数”内容的 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 的条目/叶子。在示例数据中,您可以看到,叶子可以处于任何深度。
我如何构建嵌套数据,以便条目可以出现在任何深度,而不仅仅是在预定义的深度?