在此示例中,我无法动态设置Y比例。如果有人能提供帮助,我会很高 我能够完美地设置X轴,但我无法找到如何参考我的Y数据来定义轴的范围。现在我得到的比例从-2到500,代码中不起作用的部分是注释掉的行。 谢谢你的时间!
在这里插入: https://plnkr.co/edit/eQ4HgxQC49CZIPVBXjQX
data.forEach(function(d) {
d["year"] = parseDate(d["year"])
});
var subset = data.filter(function(el) {
return el.metric === "rank"
});
var concentrations = productCategories.map(function(category) {
return {
category: category,
datapoints: subset.map(function(d) {
return {
date: d["year"],
concentration: +d[category]
}
})
}
})
xScale.domain(d3.extent(subset, function(d) {
return d["year"];
}));
yScale.domain([-2, 500]);
//yScale.domain(d3.extent(subset, function(d) {return d["rank"] })); //
答案 0 :(得分:1)
实际上,我终于能够以一种干净的方式解决这个问题:
yScale.domain([
d3.min(concentrations, function(c) { return d3.min(c.datapoints,function(v) { return v.concentration; }); }),
d3.max(concentrations, function(c) { return d3.max(c.datapoints, function(v) { return v.concentration; }); })
]);
但现在我有另一个问题,因为我希望Y比例显示只有一个选定数组的极值。这意味着我必须在解析数据时进行过滤。不确定如何做,可能会打开另一个问题。非常感谢@gerardofurtado的时间和耐心!
答案 1 :(得分:0)
好的,我会提供一个临时解决方案,因为我确定必须采用更简短的方法来实现。
首先,让我们提取所有不是"年"来自您的数据:
var values = productCategories.map(function(category){
return subset.map(function(d){
return +d[category]
})
});
然后,让我们合并这个数组:
var merged = [].concat.apply([], values);
最后:
yScale.domain(d3.extent(merged));