我正在学习D3,并尝试根据D3 v5中节点的程度缩放节点的半径。我的代码就像
nodes.forEach(function(d){
d.degree=0;});
links.forEach(function(d){
nodes[d.source].degree += 1;
nodes[d.target].degree += 1;});
返回错误
Uncaught TypeError: nodes.forEach is not a function
任何人都可以提供一个好的解决方案?
答案 0 :(得分:0)
类似的方法适用于d3.js V5:
// Add degree
d3.selectAll('g.node')
.each(function(d) {
d.degree = 0;
});
// Calculate degree
links.forEach(function(d){
d.source.degree += 1;
d.target.degree += 1;
});
// Accessor functions to get min & max
var minDegree = d3.min(
d3.values(nodes), function(d) {
return d.degree; })
var maxDegree = d3.max(
d3.values(nodes), function(d) {
return d.degree; })
// Create node scale based on degree
var nodescale = d3.scaleSqrt()
.domain( [minDegree, maxDegree] )
.range( [3, 15] ); // Change this to your desired range
// Add the node circles
node.append("circle")
.attr("r", function(d) {
return nodescale(d.degree);
})