1

我正在使用 d3(更像是学习使用)来创建等值线图。我已经管理加载我的数据和 geojson 对象并获得要显示的地图,但我想添加一些转换和用户选择数据的能力。

这是我到目前为止所拥有的一个示例(感谢 github 和 Mike Bostock 的不错的 gist 查看器):

http://bl.ocks.org/4131166;和 http://gist.github.com/4131166

我设法通过将关联的类更改为组来更改颜色,但是我将其交换为 Cynthia Brewer 的颜色的 js 版本,因为我想在它们之间进行转换。我还希望在选择不同的“乐队”时改变颜色。

我认为我的问题在于 updateValues 函数 - 它做得太多了。它一次性加载数据、绘制多边形和填充颜色。

是否可以绘制多边形,然后在单独的函数中关联颜色?

我曾考虑添加一个:

.attr("id", function(d) { return d.id; })

行到绘制路径的语句,然后以某种方式使用它在单独的语句中链接到数据,但我不太确定如何实现这一点 - 我猜想以某种方式检索每个路径的 id 并链接到数据。 ..?

任何帮助将不胜感激。即使这是关于如何改进我的代码的建议。我总是很高兴在相关的地方观察最佳实践。

4

1 回答 1

4

d3 的核心是解决方案。任何时候你做d3.selectAll( ... ).data( ... )你得到的都是一个选择

要影响选择中的每个节点,您可以链接各种 d3 函数。

还有另外两个特殊功能可以链接子选择:enter()新节点和exit()不再存在的节点。

如果更新底层数据,则调用顶层d3.selectAll( ... ).data( ... ),DOM 节点将根据这三个链进行更新:选择(所有节点)、输入(添加节点)和退出(删除节点)。

所以,在选择链上设置你的颜色,而不是输入,它们会在没有重新创建的情况下更新。

于 2012-11-23T02:20:32.230 回答