【问题标题】:d3 choropleth: changing data without reloading mapd3 choropleth:更改数据而不重新加载地图
【发布时间】:2012-11-23 10:20:32
【问题描述】:

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

这是我目前所拥有的一个示例(感谢 github 和 Mike Bostock 的优秀 gist viewer):

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

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

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

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

我曾想过添加一个:

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

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

任何帮助将不胜感激。即使这是关于如何改进我的代码的建议。我总是很乐意遵守相关的最佳做法。

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

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

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

    还有另外两个特殊函数可以链接子选择:enter() 用于新节点,exit() 用于不再存在的节点。

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

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

    【讨论】:

    • 谢谢。现在你已经指出了,这似乎很明显! Mike 关于“用联接思考”的文章现在也更有意义了!
    • 这是Thinking with Joins 文章的链接。在阅读那篇文章和这篇文章之前,我无法让它为我的生活工作。现在看起来很明显......
    猜你喜欢
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2016-07-22
    • 2015-10-07
    相关资源
    最近更新 更多