Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
D3.js';饼图标签';重叠_D3.js - Fatal编程技术网

D3.js';饼图标签';重叠

D3.js';饼图标签';重叠,d3.js,D3.js,大家好,这里是我们的社区。我试图为我遇到的问题找到解决方案,但没有得到任何帮助。我能找到的最接近的东西是似乎没有解决办法的。我是D3.js的初学者,所以这也可能是我解决问题的原因。我也试着翻阅文档,但没有成功。这就是我的问题。我试图做一些数据可视化的东西,偶然发现了D3.js示例库中的饼图,我认为它非常漂亮。一旦我开始在图表中输入大量的值,尽管我注意到我有重叠标签的问题,如下所示。我只是修改了示例页面中的代码,使其能够创建多个图表。除此之外,本质上是一样的。感谢任何人提供的帮助或信息 这仅适用于

大家好,这里是我们的社区。我试图为我遇到的问题找到解决方案,但没有得到任何帮助。我能找到的最接近的东西是似乎没有解决办法的。我是D3.js的初学者,所以这也可能是我解决问题的原因。我也试着翻阅文档,但没有成功。这就是我的问题。我试图做一些数据可视化的东西,偶然发现了D3.js示例库中的饼图,我认为它非常漂亮。一旦我开始在图表中输入大量的值,尽管我注意到我有重叠标签的问题,如下所示。我只是修改了示例页面中的代码,使其能够创建多个图表。除此之外,本质上是一样的。感谢任何人提供的帮助或信息


这仅适用于d3 v4。其思想是将每个节点与其余节点进行比较,并在检测到碰撞时移动其位置。下面的代码段使用
this.text
作为d3标签选择。一旦检测到碰撞,元件将移动到下方-可能不会针对特定情况进行优化

const nodes = this.texts.nodes();
  for (let i = 0; i < nodes.length; i++) {
    for (let j = i + 1; j < nodes.length; j++) {
      const previous = nodes[i];
      const elem = nodes[j];
      const thisbb = elem.getBoundingClientRect(),
        prevbb = previous.getBoundingClientRect();
      if (!(thisbb.right < prevbb.left ||
        thisbb.left > prevbb.right ||
        thisbb.bottom < prevbb.top ||
        thisbb.top > prevbb.bottom)) {
        const matrix = previous.transform.baseVal.consolidate().matrix;
        d3.select(elem).attr('transform', `translate(${matrix.e}, ${matrix.f + prevbb.bottom - prevbb.top})`);

      }
      const elemMatrix = elem.transform.baseVal.consolidate().matrix;
      pieData[j].pos = [elemMatrix.e, elemMatrix.f];
    }
  }
const nodes=this.text.nodes();
for(设i=0;iprevbb.right||
此bb.bottom上一个bb.bottom){
const matrix=previous.transform.baseVal.consolidate().matrix;
d3.select(elem.attr('transform','translate(${matrix.e},${matrix.f+prevbb.bottom-prevbb.top})`);
}
const elemMatrix=elem.transform.baseVal.consolidate().matrix;
pieData[j].pos=[elemMatrix.e,elemMatrix.f];
}
}

这仅适用于d3 v4。其思想是将每个节点与其余节点进行比较,并在检测到碰撞时移动其位置。下面的代码段使用
this.text
作为d3标签选择。一旦检测到碰撞,元件将移动到下方-可能不会针对特定情况进行优化

const nodes = this.texts.nodes();
  for (let i = 0; i < nodes.length; i++) {
    for (let j = i + 1; j < nodes.length; j++) {
      const previous = nodes[i];
      const elem = nodes[j];
      const thisbb = elem.getBoundingClientRect(),
        prevbb = previous.getBoundingClientRect();
      if (!(thisbb.right < prevbb.left ||
        thisbb.left > prevbb.right ||
        thisbb.bottom < prevbb.top ||
        thisbb.top > prevbb.bottom)) {
        const matrix = previous.transform.baseVal.consolidate().matrix;
        d3.select(elem).attr('transform', `translate(${matrix.e}, ${matrix.f + prevbb.bottom - prevbb.top})`);

      }
      const elemMatrix = elem.transform.baseVal.consolidate().matrix;
      pieData[j].pos = [elemMatrix.e, elemMatrix.f];
    }
  }
const nodes=this.text.nodes();
for(设i=0;iprevbb.right||
此bb.bottom上一个bb.bottom){
const matrix=previous.transform.baseVal.consolidate().matrix;
d3.select(elem.attr('transform','translate(${matrix.e},${matrix.f+prevbb.bottom-prevbb.top})`);
}
const elemMatrix=elem.transform.baseVal.consolidate().matrix;
pieData[j].pos=[elemMatrix.e,elemMatrix.f];
}
}
这应该有助于您实现可能的重复。这应该有助于您实现可能的重复