D3.js 试图修改D3JS中的Voronoi映射

D3.js 试图修改D3JS中的Voronoi映射,d3.js,voronoi,D3.js,Voronoi,我正试图修改这个D3示例以用于我的数据集 我想我的问题是创建用于计算Voronoi多边形的坐标数组,但在这一点上我不确定 我得到一个未捕获类型错误:无法读取未定义的错误的属性“0”,该错误指向我调用数组的行。代码是实时的,请看这里 地图显示得很好,但是数据点、单选按钮和voronoi线没有显示(我不想显示数据点之间的线,所以代码已经删除) 如有任何想法或建议,将不胜感激。非常感谢 这里有一些小事情可以很容易地解决,但有些需要一些工作。首先,您使用的是新版本的d3(v3),而您尝试复制的示例

我正试图修改这个D3示例以用于我的数据集

我想我的问题是创建用于计算Voronoi多边形的坐标数组,但在这一点上我不确定

我得到一个
未捕获类型错误:无法读取未定义的
错误的属性“0”,该错误指向我调用数组的行。代码是实时的,请看这里

地图显示得很好,但是数据点、单选按钮和voronoi线没有显示(我不想显示数据点之间的线,所以代码已经删除)


如有任何想法或建议,将不胜感激。非常感谢

这里有一些小事情可以很容易地解决,但有些需要一些工作。首先,您使用的是新版本的d3(v3),而您尝试复制的示例是旧版本。在映射方面,版本之间已经发生了重大变化。因此,您可以使用d3的旧版本(我认为v2可以使用),也可以研究更改

Uncaught TypeError:无法读取未定义的
错误的属性“0”,因为
d3.geom.voronoi(positions)
行正在生成NaN。我不是100%确定为什么,但你可以把这些过滤掉,得到一个临时修复。一个简单的过滤器如下所示:

  g.append("svg:path")
      .attr("class", "cell")
      .attr("d", function(d, i) {
        if (polygons[i][0][0]) { 
          return "M" + polygons[i].join("L") + "Z";
          }
        })
当多边形的第一个元素中没有假值(NULL、NaN等)时,使用if true。请注意,这是临时修复,当您调查为什么会得到NaN,这将不会产生正确的voronoi多边形

数据点的修复非常简单,只需将半径设置为大于0的值,如10(尽管我认为您可能希望将点缩放为数据的属性,如TotalPublished)。例如,请参见最后一行:

circles.selectAll("circle")
      .data(locations.rows
      .sort(function(a, b) { return b.TotalPublished - a.TotalPublished; }))
    .enter().append("svg:circle")
      .attr("transform", function(d) { return "translate(" + projection(d.coordinates) + ")"; })
      .attr("r", 10);
单选按钮(或复选框)不会显示,因为它不是由javascript生成的(尽管可以)。在本例中,您引用了在本代码段的html中生成的:

<div style="position:absolute;bottom:0;font-size:18px;">
  <input type="checkbox" id="voronoi"> <label for="voronoi">show Voronoi</label>
</div>

显示沃罗诺

一旦你完成了这项工作,你需要让沃罗诺线工作。我认为在代码中,voronoi行不会显示,因为复选框未选中。所以你可以把这些行注释掉,看看会发生什么。关于路径的一个快速提示是,如果只想显示线条,则需要将填充样式设置为“无”,并将笔划设置为所需的任何颜色。如果你不将填充设置为“无”,你只会得到一个黑屏。

你能将实时代码更改为使用d3的非精简版本吗?这将让我们更好地了解到底什么是失败的。