Javascript 在d3.js中,使用svg.node()的目的是什么?

Javascript 在d3.js中,使用svg.node()的目的是什么?,javascript,d3.js,data-visualization,Javascript,D3.js,Data Visualization,我在试着理解我得到的密码。 我想我已经详细讲过了。 但还是有一些事情我真的不明白 我不能理解的事情是 1.svg.node 2等分/等分部分 设i=0时为3;i

我在试着理解我得到的密码。 我想我已经详细讲过了。 但还是有一些事情我真的不明白

我不能理解的事情是

1.svg.node

2等分/等分部分

设i=0时为3;i 1.svg.node 在生成器“gen”中,它生成svg.node。 它实际上是在我的svg上画东西,我检查了它,只是取消了行的注释

什么是svg.node?为什么需要使用该参数来绘制某些内容? 因为通常我想画东西的时候, 我只需要d3。选择“svg”。追加。。。。 然后我可以在我的“svg”上画一些东西,但是在这个生成器中, 它正在使用“svg.node”来绘制一些东西。我想知道为什么以及“svg.node”是什么

function* gen() {
  var random = d3.randomNormal(); // Try randomUniform?

  const n = 2000;
  const width = window.innerWidth;
  const height = 400;
  const radius = 2;
  const dodge = dodger(radius * 2 + 1);
  const margin = { top: 0, right: 10, bottom: 20, left: 10 };

  const values = Float64Array.from({ length: n }, random);

  const x = d3.scaleLinear(d3.extent(values), [
    margin.left,
    width - margin.right
  ]);
  const svg = d3
    .select("body")
    .append("svg")
    .attr("width", width)
    .attr("height", height)
    .style("overflow", "visible");

  // var fillScale = d3.scaleSequentialLog(chroma.interpolateSinebow)

  svg
    .append("g")
    .attr("transform", `translate(0,${height - margin.bottom})`)
    .call(d3.axisBottom(x));

  function dodger(radius) {
    const radius2 = radius ** 2;
    const bisect = d3.bisector(d => d.x);
    const circles = [];

    return function(x) {
      const l = bisect.left(circles, x - radius);
      const r = bisect.right(circles, x + radius);
      let y = 0;
      for (let i = l; i < r; ++i) {
        const { x: xi, y: yi } = circles[i];
        const x2 = (xi - x) ** 2;
        const y2 = (yi - y) ** 2;
        if (radius2 > x2 + y2) {
          y = yi + Math.sqrt(radius2 - x2) + 1e-6;
          i = l - 1;
          continue;
        }
      }
      circles.splice(bisect.left(circles, x, l, r), 0, { x, y }); 
      return y;
    };
  }

  for (let i = 0; i < n; ++i) {
    if (i % 5 === 0) yield svg.node();
    const cx = x(values[i]); // x(values[i]);
    const cy = height - margin.bottom - dodge(cx) - radius - 1;

    svg
      .append("circle")
      .attr("cx", cx)
      .attr("cy", -400)
      .attr("r", radius)
      .attr("fill", "red")
      .attr("fill", "#9e0dd7") //purple
      .transition()
      .duration(650)
      .ease(d3.easeBounce)
      .attr("cy", cy);
  }

  yield svg.node();
}


const genratorAnimation = gen(); 

let result = genratorAnimation.next();
//genratorAnimation.next();
let interval = setInterval(function(){
   if(!result.done) {
     genratorAnimation.next();
   }
   else {
    clearInterval(interval)
   }
}, 50);
2分段/平分线/拼接

我不明白代码使用对分、对分和拼接来放置球的逻辑。 我知道对分是指新实体将进入数组的索引号。基于升序 接头正在替换或插入阵列中的图元。 然而,我不明白代码是如何实现所需的投球安排的。

设i=0时为3;i 我通过将1==0更改为2==0和10==0来处理这个数字。 这个方程式似乎定义了每次落下的球的数量。 为什么?

我知道我问的问题太多了,我愿意一个接一个地发帖问好几次。 但如果有人能回答,我将不胜感激


提前谢谢。

svg.node返回svg值。但是,我不知道它为什么通过放置参数来绘制某些内容。

svg.node返回svg值。但是,我不知道它为什么通过放置参数来绘制某些内容。

如果您使用console.logsvg.node,您可以在控制台中找到一个对象包含svg的全部元素节点


return svg.node通常用于显示或更新svg图形。

如果您使用console.logsvg.node,您可以在控制台中找到包含svg的全部元素节点的对象

return svg.node通常用于显示或更新svg图形