d3.js - 为什么域不使用D3中的d3.max(data)?

标签 d3.js

我是D3的新手,正在玩散点图。我无法让d3.max(data)在设置域中正常工作!

我有以下设置随机数据集的方法:

var data = [];
      for (i=0; i < 40; i++){
            data.push({"x": i/40, "y": i/8, "a": Math.floor(Math.random() * 3), "x2": Math.random()});
        }

然后以下设置我的坐标:
 var x = d3.scale.linear().domain([0, 1]).range([0 + margin, w-margin]),
            y = d3.scale.linear().domain([0, d3.max(data)]).range([0 + margin, h-margin]),
            c = d3.scale.linear().domain([0, 3]).range(["hsl(100,50%,50%)", "rgb(350, 50%, 50%)"]).interpolate(d3.interpolateHsl);

这会将所有40个点放在一条水平线上。如果我将d3.max(data)替换为'5',则它是对角线(尽管从左上角到右下角,我仍在努力翻转y坐标)。为什么d3.max(data)不能按预期工作?

最佳答案

d3.max()需要一个数字数组,而不是对象。 data的元素具有内部键值结构,并且d3.max()无法知道最大的值。您可以使用jQuery's $.map 之类的东西来获取所需对象的元素,然后取最大值,例如

var maxy = d3.max($.map(data, function(d) { return d.y; }));

编辑:

正如下面的注释中指出的那样,您甚至不需要JQuery,因为.map()是 native Array方法。然后,代码变得简单
var maxy = d3.max(data.map(function(d) { return d.y; }));

甚至更简单(对于那些未实现Array.map()的浏览器),使用d3.max的可选第二个参数来告诉它如何访问数组中的值
var maxy = d3.max(data, function(d) { return d.y; });

关于d3.js - 为什么域不使用D3中的d3.max(data)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9688302/

相关文章:

javascript - 用新的 svg 替换当前的 svg,同时删除旧的 DOM 元素

javascript - 将 $(this) 传递给 d3 选择器

javascript - d3 面积堆积折线图

d3.js - 在 D3.js 圆环图中禁用类别后的新总数总和

javascript - 删除D3中的线元素

javascript - 如何将数字范围 (0-50,000) 转换为放射状进度图表数字?

javascript - d3.js 中的动态重新缩放在网格线中有奇怪的伪影

javascript - D3 中的数组变换

svg - D3.js:更新 LinearGradient 中的停止点

javascript - 如何在 d3.js 中行走一棵树