这里有许多小事情可以很容易地解决,但有些需要一些工作。首先是您使用的是新版本的 d3 (v3),而您尝试复制的示例是旧版本。事物的映射方面的版本之间发生了重大变化。因此,您可以使用旧版本的 d3(我认为 v2 可以使用)或调查更改。
Uncaught TypeError: Cannot read property '0' of undefined
正在生成错误,因为lined3.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 等)时,如果为 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 线路正常工作。我认为与您的代码一样,由于未选中复选框,因此不会显示 voronoi 行。所以你可以把这些行注释掉,看看会发生什么。路径的快速提示是,如果您只想显示线条,则需要将填充样式设置为无,并将笔划设置为您想要的任何颜色。如果您不将填充设置为无,则只会出现黑屏。