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