我在这里遇到了@SamSelikoff 遇到的完全相同的问题Update the y-axis of a brushed area chart。他正在处理的示例是此处的单个数据系列区域图http://bl.ocks.org/mbostock/1667367而我正在处理类似于此处http://bl.ocks的多折线图.org/mbostock/3884955。
如何为多折线图中更复杂的数据映射调整数据过滤器?即像这样映射的数据
var cities = color.domain().map(function(name) {
return {
name: name,
values: data.map(function(d) {
return {date: d.date, temperature: +d[name]};
})
};
});
y.domain 像这样设置
y.domain([
d3.min(cities, function(c) { return d3.min(c.values, function(v) { return v.temperature; }); }),
d3.max(cities, function(c) { return d3.max(c.values, function(v) { return v.temperature; }); })
]);
如何创建与此类似的过滤器(Sam 的单变量数据解决方案)
// Use x.domain to filter the data, then find the max and min duration of this new set, then set y.domain to that
x.domain(brush.empty() ? x2.domain() : brush.extent());
var dataFiltered = data.filter(function(d, i) {
if ( (d.date >= x.domain()[0]) && (d.date <= x.domain()[1]) ) {
return d.duration;
}
})
y.domain([0, d3.max(dataFiltered.map(function(d) { return d.duration; }))]);
我尝试将过滤器放在与完整数据集 y 轴的最小值和最大值相同的语法中,就像这样
x.domain(brush.empty() ? x2.domain() : brush.extent());
var testMin = d3.min(cities.filter(function(c) { return c.values, function(v) {if ( (v.dates >= x.domain()[0]) && (v.dates <= x.domain()[1]) ){ return v.temperature; } }}))
到目前为止没有运气。有任何想法吗?