我试图从d3图库中重新定位the sequences sunburst example,并且没有得到错误+ js错误,我不知道如何修复。
"我"代码可以找到here。我唯一的改变就是使用我自己的(现在是假的)数据来描述吸烟者和吸烟者的情况。进来看医生。他们可以讨论戒烟和肺癌筛查,每个都有自己独特的管道。
错误来自sequences.js中的buildHierarchy()
函数。这个人使用提供的样本原始样本数据就好了(在那个回购中提供了' sample-data.csv' - 更改lines.js的第46行切换到那个)。但是当我指向my little fake dataset时,它的barf为:
Uncaught TypeError: Cannot read property 'push' of undefined sequences.js:303
我已经介入了这个功能&可以看到它发生在该函数为csv中第一行的最后一个组件添加叶节点之后。在执行时,children
未设置,因此对push()
的调用失败。
我不明白为什么原始数据不会导致此问题,或者如何修复buildHierarchy()
以便它可以正常工作。
感激不尽的任何帮助。
答案 0 :(得分:1)
这应该解决它,对于某些数据集遇到类似的问题。在创建新的子节点时添加了孩子:[]。除非你添加" -End"否则它看起来会略显错误。到一个元素数据位(DiscussScreening和DiscussedCessation),例如示例如何产品>结束
function buildHierarchy(csv) {
var root = {
"name": "root",
"children": []
};
for (var i = 0; i < csv.length; i++) {
var sequence = csv[i][0];
var size = +csv[i][1];
if (isNaN(size)) { // e.g. if this is a header row
continue;
}
var parts = sequence.split("-");
var currentNode = root;
for (var j = 0; j < parts.length; j++) {
var children = currentNode["children"];
var nodeName = parts[j];
var childNode;
if (j + 1 < parts.length) {
// Not yet at the end of the sequence; move down the tree.
var foundChild = false;
for (var k = 0; k < children.length; k++) {
if (children[k]["name"] == nodeName) {
childNode = children[k];
foundChild = true;
break;
}
}
// If we don't already have a child node for this branch, create it.
if (!foundChild) {
childNode = {
"name": nodeName,
"children": []
};
children.push(childNode);
}
currentNode = childNode;
} else {
// Reached the end of the sequence; create a leaf node.
childNode = {
"name": nodeName,
"size": size,
"children" : []
};
children.push(childNode);
}
}
}
return root;
};