如何计算 D3 v5 中的节点度?

zoe*_*ong 3 d3.js

我正在学习 D3 并尝试根据 D3 v5 中的度数来缩放节点的半径。我的代码就像

 nodes.forEach(function(d){
        d.degree=0;});
links.forEach(function(d){
        nodes[d.source].degree += 1;
        nodes[d.target].degree += 1;});
Run Code Online (Sandbox Code Playgroud)

它返回错误

Uncaught TypeError: nodes.forEach is not a function
Run Code Online (Sandbox Code Playgroud)

谁能提供一个好的解决方案吗?

小智 5

像这样的东西适用于 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);
    })
Run Code Online (Sandbox Code Playgroud)