我有一个对象数组叫做
问题在于,当我尝试使用for循环为每个元素生成一个图表时,出现了问题。查看了stackoverflow和网络,但解决方案都是关于生成固定数量的多个图表,而不是动态生成多个图表。
以下是我用于生成一个图表的工作代码。有没有推荐的方法来自动生成x个图表?
graphData
(大小不固定)。每个元素都包含创建d3图所需的所有信息,如果我通过硬编码访问graphData
元素(即graphdata[0]
、graphdata[1]
等),我可以成功绘制出图形。问题在于,当我尝试使用for循环为每个元素生成一个图表时,出现了问题。查看了stackoverflow和网络,但解决方案都是关于生成固定数量的多个图表,而不是动态生成多个图表。
以下是我用于生成一个图表的工作代码。有没有推荐的方法来自动生成x个图表?
var graphData = data.graph;
var RADIUS = 15;
var edgeData = graphData[0].edges;
var nodeData = graphData[0].nodes;
var stageNum = graphData[0].stage;
var xScale = d3.scale.linear()
.domain([d3.min(edgeData, function (d) {
return d.start[0];
}),
d3.max(edgeData, function (d) {
return d.start[0];
})])
.range([50, w - 100]);
var yScale = d3.scale.linear()
.domain([d3.min(edgeData, function (d) {
return d.start[1];
}),
d3.max(edgeData, function (d) {
return d.start[1];
})])
.range([50, h - 100]);
var rScale = d3.scale.linear()
.domain([0, d3.max(edgeData, function (d) {
return d.start[1];
})])
.range([14, 17]);
// already have divs with classes stage1, stage2... created.
var svg = d3.select(".stage" + stageNum).append("svg")
.attr({"width": w, "height": h})
.style("border", "1px solid black");
var elemEdge = svg.selectAll("line")
.data(edgeData)
.enter();
var edges = elemEdge.append("line")
.attr("x1", function (d) {
return xScale(d.start[0]);
})
.attr("y1", function (d) {
return yScale(d.start[1]);
})
.attr("x2", function (d) {
return xScale(d.end[0]);
})
.attr("y2", function (d) {
return yScale(d.end[1]);
})
.attr("stroke-width", 2)
.attr("stroke", "black");
var elemNode = svg.selectAll("circle")
.data(nodeData)
.enter();
var nodes = elemNode.append("circle")
.attr("cx", function (d) {
return xScale(parseInt(d.x));
})
.attr("cy", function (d) {
return yScale(parseInt(d.y));
})
.attr({"r": rScale(RADIUS)})
.style("fill", "yellow")
.style("stroke", "black");