d3.js:数据集数组,带多个y轴值
我完全是d3.js的初学者,所以请友善一点:) 我有以下数据集: 两个问题d3.js:数据集数组,带多个y轴值,d3.js,D3.js,我完全是d3.js的初学者,所以请友善一点:) 我有以下数据集: 两个问题 d3是否提供了更好的方法来查找数据集数组中y轴数据(除第0列外的所有列,第0列是x轴(时间))的最大值?目前,我只是在整个数据集数组中循环并生成第二个数组,不包括第一列。也许除了我应该使用的数组之外,还有更好的数据结构 var data_arr = []; for (row in dataset){ for (col=1;col < dataset[row].length; co
var data_arr = [];
for (row in dataset){
for (col=1;col < dataset[row].length; col++){
data_arr.push(dataset[row][col]);
}
}
var yScale = d3.scale.linear()
.domain([0, d3.max(data_arr)])
.range([h - padding, padding]);
感谢您的帮助 我对您的示例做了一些更改,您可以在上看到结果 首先,我稍微修改了你的数据。这主要是一种样式,但我发现使用对象而不是数组更容易:
//Static dataset
var dataset = [
{x: d3.time.hour.utc.offset(now, -5), y1: 1, y2: 10},
{x: d3.time.hour.utc.offset(now, -4), y1: 2, y2: 20},
{x: d3.time.hour.utc.offset(now, -3), y1: 3, y2: 30},
{x: d3.time.hour.utc.offset(now, -2), y1: 4, y2: 40},
{x: d3.time.hour.utc.offset(now, -1), y1: 5, y2: 50},
{x: now, y1: 6, y2: 60},
];
然后您可以找到您的域和范围,如下所示:
var xDomain = d3.extent(dataset, function(i) { return i.x; });
var maxY = d3.max(dataset, function(i) { return Math.max(i.y1, i.y2); });
然后,要添加多个y值,只需附加一个带有适当值的附加圆。我给了他们不同的类,这样你可以用它来选择他们,如果你以后想做转换或更新的话
//Create circles
svg.selectAll(".y1")
.data(dataset)
.enter()
.append("circle")
.attr("cx", function(d) { return xScale(d.x); })
.attr("cy", function(d) { return yScale(d.y1); })
.attr("class", "y1")
.attr("r", 2);
//Create circles
svg.selectAll(".y2")
.data(dataset)
.enter()
.append("circle")
.attr("cx", function(d) { return xScale(d.x); })
.attr("cy", function(d) { return yScale(d.y2); })
.attr("class", "y2")
.attr("r", 2);
var xDomain = d3.extent(dataset, function(i) { return i.x; });
var maxY = d3.max(dataset, function(i) { return Math.max(i.y1, i.y2); });
//Create circles
svg.selectAll(".y1")
.data(dataset)
.enter()
.append("circle")
.attr("cx", function(d) { return xScale(d.x); })
.attr("cy", function(d) { return yScale(d.y1); })
.attr("class", "y1")
.attr("r", 2);
//Create circles
svg.selectAll(".y2")
.data(dataset)
.enter()
.append("circle")
.attr("cx", function(d) { return xScale(d.x); })
.attr("cy", function(d) { return yScale(d.y2); })
.attr("class", "y2")
.attr("r", 2);