javascript - d3 包布局的地理排序功能

标签 javascript sorting d3.js geospatial circle-pack

使用 d3 的包布局,我制作了一些与状态相关的气泡。当前测试脚本:https://jsfiddle.net/80wjyxp4/4/ .它们根据地区着色。您会注意到德克萨斯在“NW”中,加利福尼亚在“SE”中,等等。

问题:

你会如何在地理上对包布局中的圆圈进行排序?

一种 hack 方法可能使用默认的 d3.layout.pack.sort(null)。这种排序从第一个数据点(在本例中为 AK)开始,然后逆时针方向添加气泡。我可以按照接近状态位置的顺序手动对要输入的数据进行排序,并添加空白圆圈以移动边缘圆圈。

我对更好的想法很感兴趣。使用修改后的强制布局会更好吗,比如 http://bl.ocks.org/mbostock/1073373d3.geom.voronoi() 似乎很有用。

enter image description here

最佳答案

在此http://bl.ocks.org/mbostock/1073373看看这些行:

  states.features.forEach(function(d, i) {
    if (d.id === 2 || d.id === 15 || d.id === 72) return; // lower 48
    var centroid = path.centroid(d);  //   <===== polygon center
    if (centroid.some(isNaN)) return;
    centroid.x = centroid[0];              <==== polygon lat
    centroid.y = centroid[1];              <==== polygon lng
    centroid.feature = d;                  
    nodes.push(centroid);              <== made node array of centroids
  });
----------------
force
      .gravity(0)
      .nodes(nodes)           <==== asign array nodes to nodes
      .links(links)
      .linkDistance(function(d) { return d.distance; })
      .start();

每个状态就像一个多焦点布局。就像这个:http://bl.ocks.org/mbostock/1021841

关于javascript - d3 包布局的地理排序功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37094953/

相关文章:

javascript - D3.js 如何将选择嵌入到新元素中

javascript - 如何在谷歌饼图中自动偏移最大切片?

javascript - 匹配以下字符串的正则表达式

java - 通过字段的字段比较两个对象

ios - 如何在 Swift 4 中按列值对 UITableView 进行排序?

c# - 对 Listview C# 上的项目进行排序

d3.js - 将选择与组合并

javascript - 为什么使用 D3.js 显示的数据看起来是 chop 的?

Javascript 'Element' 在 ie 中未定义,但在 chrome 和 firefox 中工作正常

javascript - 有没有办法在 CronJobs 中获取毫秒数?