d3 choropleth:在不重新加载地图的情况下更改数据

时间:2012-11-22 22:35:16

标签: javascript d3.js

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

这是我到目前为止的一个例子(感谢github和Mike Bostock的好主人观众):

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

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

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

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

我曾经想过添加一个:

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

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

任何帮助将不胜感激。即使这是关于如何改进我的代码的建议。在相关的情况下,我总是很乐意遵守最佳实践。

1 个答案:

答案 0 :(得分:4)

d3的核心是解决方案。只要您d3.selectAll( ... ).data( ... )获得的是选择

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

还有两个其他特殊功能可用于子选择:enter()用于新节点&对于不再存在的节点,exit()

如果更新基础数据,则调用顶级d3.selectAll( ... ).data( ... ),并根据这三个链更新DOM节点:选择(所有节点),输入(添加节点),&退出(节点被删除)。

因此,在选择链上设置颜色,而不是输入,并且它们将在不重新创建的情况下进行更新。