D3.js 使用nest()和rollup循环包布局
我正在尝试使用nest和.rollup创建一个圆形包图。我得到以下错误:D3.js 使用nest()和rollup循环包布局,d3.js,D3.js,我正在尝试使用nest和.rollup创建一个圆形包图。我得到以下错误: Error: Invalid value for <g> attribute transform="translate(undefined,undefined)" Error: Invalid value for <circle> attribute r="NaN" 谢谢阅读。那么,你想要一个父圈,我们称之为世界,子圈代表每个国家,大小由JSON数组中的条目数决定 d3.json("data/co
Error: Invalid value for <g> attribute transform="translate(undefined,undefined)"
Error: Invalid value for <circle> attribute r="NaN"
谢谢阅读。那么,你想要一个父圈,我们称之为世界,子圈代表每个国家,大小由JSON数组中的条目数决定
d3.json("data/countriesNested.php", function(error, data) {
var submissionsByCountry = d3.nest()
.key(function(d) {
return d.Country;
})
.rollup(function(leaves) {
return leaves.length;
})
.entries(data);
var root = {
"key": "world",
"children": submissionsByCountry
};
...
这将为您提供与flare.json非常相似的内容
接下来,你需要给d3一个合适的圆圈大小
var pack = d3.layout.pack()
.size([diameter - 4, diameter - 4])
.value(function(d) {
return d.values; //<-- this comes from your roll-up and is the count.
});
这是一个。那么,你想要一个父圈,我们称之为世界,子圈代表每个国家的大小,在你的JSON数组中有条目的计数
d3.json("data/countriesNested.php", function(error, data) {
var submissionsByCountry = d3.nest()
.key(function(d) {
return d.Country;
})
.rollup(function(leaves) {
return leaves.length;
})
.entries(data);
var root = {
"key": "world",
"children": submissionsByCountry
};
...
这将为您提供与flare.json非常相似的内容
接下来,你需要给d3一个合适的圆圈大小
var pack = d3.layout.pack()
.size([diameter - 4, diameter - 4])
.value(function(d) {
return d.values; //<-- this comes from your roll-up and is the count.
});
下面是一个问题。您的代码中有一些错误需要修复: 您需要为包布局上的子项和值设置访问器函数:
var pack = d3.layout.pack()
.size([diameter - 4, diameter - 4])
.children(function(d) {
return d.values; // accessor for children
})
.value(function(d) {
return d.values; // accessor for values
});
您的d3.nest返回一个数组,但d3.pack要求您提供一个包含层次结构的根对象。必须创建根对象并将嵌套数组放入其中:
var countryRoot = {
key: "root",
values: submissionsByCountry
};
在您的代码中,您将数据嵌套到submissionsByCountry中,但您没有在其他任何地方使用此变量。因此,在将数据绑定到svg时,显然必须引用它。这是由上面提到的根对象完成的,该根对象稍后绑定到svg
包布局添加到数据节点的属性包括值x和y,而您将它们称为cx和cy,它们是属性,但不存在于数据中。因此,您得到了transform=translateundefined、undefined错误消息。您应该使用以下属性:
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")";
});
我整理了一份工作报告。您的代码中有一些错误需要修复: 您需要为包布局上的子项和值设置访问器函数:
var pack = d3.layout.pack()
.size([diameter - 4, diameter - 4])
.children(function(d) {
return d.values; // accessor for children
})
.value(function(d) {
return d.values; // accessor for values
});
您的d3.nest返回一个数组,但d3.pack要求您提供一个包含层次结构的根对象。必须创建根对象并将嵌套数组放入其中:
var countryRoot = {
key: "root",
values: submissionsByCountry
};
在您的代码中,您将数据嵌套到submissionsByCountry中,但您没有在其他任何地方使用此变量。因此,在将数据绑定到svg时,显然必须引用它。这是由上面提到的根对象完成的,该根对象稍后绑定到svg
包布局添加到数据节点的属性包括值x和y,而您将它们称为cx和cy,它们是属性,但不存在于数据中。因此,您得到了transform=translateundefined、undefined错误消息。您应该使用以下属性:
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")";
});
我整理了一份工作报告。非常感谢!访问器函数是我最大的绊脚石。我对上面的解决方案投了接受票,因为它向前迈出了一小步,将组织嵌套在各自的国家和“世界”中,尽管从本质上说,这两种解决方案都回答了我的问题。再次感谢-我感谢你的帮助。非常感谢你的帮助!访问器函数是我最大的绊脚石。我对上面的解决方案投了接受票,因为它向前迈出了一小步,将组织嵌套在各自的国家和“世界”中,尽管从本质上说,这两种解决方案都回答了我的问题。再次感谢-我感谢你的帮助。