如何使用三个不同的数据维度计算我的域的范围?请考虑以下数据:
var data = [
{
"Date":"10-10-2013",
"High1" : 3049,
"High2" : 2100,
"high3" : 43
},
{
"Date":"09-10-2013",
"High1" : 3142,
"High2" : 2010,
"high3" : 23
},
{
"Date":"08-10-2013",
"High1" : 3099,
"High2" : 2190,
"high3" : 90
}
我想为High1绘制一条线,为High3绘制另一条线,为High3绘制另一条线,因此需要找到所有组合的范围,以便为图形创建y轴。
var extents = ["High1", "High2", "high3"].map(function(dimensionName) {
return d3.extent(data, function(d) { return d[dimensionName] });
});
var extent = [d3.min(extents, function(d) { return d[0] }),
d3.max(extents, function(d) { return d[1] })];
这首先分别计算每个维度的范围,然后选择全局最小值和最大值。
诀窍是使用d3.max和d3.min的访问器。
d3.max(data, function(d){
return Math.max.apply(Math, [d.High1, d.High2, d.high3]);
})
d3.min(data, function(d){
return Math.min.apply(Math, [d.High1, d.High2, d.high3]);
})
如果您不理解申请的使用,请参见JavaScript: min & max Array values?。
在@ValarDohaeris的基础上回答,为了使它稍微更通用并允许我使用过的不同数量的系列:
var extents = series.map(function(seriesName)
{
return d3.extent(data, function(d) { return d[seriesName]; });
});
var yScale = d3.scaleLinear()
.domain([d3.min(extents, function(d) { return d[0]; }),
d3.max(extents, function(d) { return d[1]; })])
.range([height,0]);
其中'series'是包含数据中序列名称的数组。我在角度指令中使用它,允许我将任意数量的系列输入到折线图中