我有一些代码可以获取列中元素的值并将它们放入数组中:
var someArray = new Array(rows.selectAll("td").filter(function(d,i)
{
if(i==2) //index of the cells in the rows where I retrieve the data
{
return (d3.select(this))
}
}));
^创建一个数组[1]的数组,它具有元素中单元格的值,例如“2.6”或“5.4”
当我尝试使用时:
console.log(d3.min(someArray));
我得到[Array [1],Array [1],Array [1],...]而我需要返回的是那些数组中最低的,然后是最大的值(这将在d3.scale中使用) .linear()。domain([最小值,最大值])
答案 0 :(得分:5)
您只需要嵌套调用:
var min = d3.min(arrayOfArrays, function(d) { return d3.min(d); });
要同时获得最大值和最小值,请使用 d3.extent()
:
// extent[0] == min, extent[1] == max
var extent = d3.extent(arrayOfArrays, function(d) { return d3.extent(d); });
击> <击> 撞击>
不幸的是,你无法在嵌套的情况下获得范围 - 你必须分别做min和max。
答案 1 :(得分:3)
对于d3.extend
的嵌套版本,ES6的优点以及拥有accessor
的可能性,您可以使用以下内容:
function nestedExtent(data, accessor) {
return data.reduce(([extentMin, extentMax], d) => {
const [min, max] = extent(d, accessor);
return [
Math.min(extentMin, min),
Math.max(extentMax, max),
];
}, [Infinity, -Infinity]);
}
答案 2 :(得分:1)
我正在寻找一种方法来筑巢d3.extent
而我无法找到它,所以我为自己想出了这个,这就是我想出来的......
var extent = d3.extent(arrayOfArrays.reduce(function(m,d){return m.concat(d)},[]))
答案 3 :(得分:0)
这是基于@Johnny的回答,对于我们这些不幸使用ES6的人来说:
function nestedExtent(data, accessor) {
return data.reduce( function ( prevArr, currArr) {
var extentArr = d3.extent([currArr], accessor);
return [
Math.min(prevArr[0], extentArr[0]),
Math.max(prevArr[1], extentArr[1])
];
}, [Infinity, -Infinity] );
}
示例:
var mydata = [4, 6, -2, 42, 17];
nestedExtent( mydata , function(d) { return d; });
答案 4 :(得分:0)
在我的情况下,我有一个数组数组的数据,我使用了一种有点不同的方式混合 Cool Blue 解决方案。 我的数据就像
[[{
"timestamp": 44299.46625605324,
"dateTime": "2021-04-13T11:11:24.5237792Z",
"value": 9.92,
"status": 0
},
{
"timestamp": 44299.466267627315,
"dateTime": "2021-04-13T11:11:25.5237792Z",
"value": 3.92,
"status": 0
},],[{
"timestamp": 44299.46625605324,
"dateTime": "2021-04-13T11:11:24.5237792Z",
"value": 9.92,
"status": 0
},
{
"timestamp": 44299.466267627315,
"dateTime": "2021-04-13T11:11:25.5237792Z",
"value": 3.92,
"status": 0
},]]
我尝试在 x 轴上使用时间刻度并使用 dateTime 属性来获取刻度域。
d3.extent(data.reduce(function(m,d){
return m.concat(d3.extent(d, d => new Date(d.dateTime).valueOf()))
},[]))