4

这是我的第一个问题,我对美妙的 d3.js 完全陌生。我尝试使用包含 12 个对象和许多属性的 geojson 文件制作等值线图。

我想通过 d3.min 和 d3.max 计算色阶(量化)的域,但一定有问题。min 和 max 的值仍然未定义(如果我相信我的 webinspektor)。在域标签中使用数字一切正常。

我希望有一个人可以帮助我。感谢您的每一个回答。

这是我的代码:

d3.json("IKSK_LK_Goe_31463.json", function (collection) {




                overlay.afterAdd = function () {                    // Add the container when the overlay is added to the map.


                    color.domain([
                            //1,30
                            d3.min(collection, function(d) {return d.features.properties.EINWOHNER;}),
                            d3.max(collection, function(d) {return d.features.properties.EINWOHNER;})
                            ]); 
                            console.log(d3.max(collection, function(d) {return d.features.properties.EINWOHNER;}));
4

4 回答 4

3

正如其他人所提到的, d3.max 的输入应该是一个数组。确保输入不是对象,如果它是使用 d3.values(collection); 创建一个值数组;

var collection = {
  '01': { foo: 'bar', value: 10 },
  '02': { foo: 'baz', value: 20 }
};

var collection_array = d3.values(collection);
// --> [{ foo: 'bar', value: 10 }, { foo: 'baz', value: 20 }]
d3.max(collection_array, function (d) { return d.value});
// --> 20

祝你好运!

/威尔

于 2014-05-10T21:25:16.393 回答
2

如果d.features.properties.EINWOHNER是一个整数值,或者您想从中提取整数值(这就是 min 和 max 的意义),然后'+'在它之前添加 a ,如下所示:

    d3.min(collection, function(d) {return +d.features.properties.EINWOHNER;}),
    d3.max(collection, function(d) {return +d.features.properties.EINWOHNER;})]);
于 2014-01-06T12:28:13.223 回答
1

正如其他人所提到的,在您的数字变量前面添加 + 可能会有所帮助。

一个伟大而简单的 d3 函数来获取最小值/最大值并将其用作域是

d3.extent(数组[,访问器])

使用自然顺序返回给定数组中的最小值和最大值。这相当于同时调用 d3.min 和 d3.max。

所以 color.domain(d3.extent(...)) 也会正确设置域。

希望能帮助到你 :)

于 2015-02-23T20:38:20.300 回答
0

使用这样的东西:

var xx = [{x:'one',y:1}, {x:'two',y:2}]; //array
var maxOfY = d3.max(xx, function(d){ return d.y;});
于 2015-12-23T11:00:02.283 回答