D3.js d3.max undefined

时间:2013-09-17 16:31:07

标签: javascript d3.js

这是我的第一个问题,我对美妙的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 个答案:

答案 0 :(得分:3)

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

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

祝你好运!

/意志

答案 1 :(得分:2)

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

    d3.min(collection, function(d) {return +d.features.properties.EINWOHNER;}),
    d3.max(collection, function(d) {return +d.features.properties.EINWOHNER;})]);

答案 2 :(得分:1)

在数字变量前添加+可能会有所帮助,正如其他人所说。

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

d3.extent(array [,accessor])

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

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

希望它有所帮助:)

答案 3 :(得分:0)

使用类似的东西:

var xx = [{x:'one',y:1}, {x:'two',y:2}]; //array
var maxOfY = d3.max(xx, function(d){ return d.y;});