我在发布这个问题时稍微编辑了这个问题。这是新代码: 这是我的代码:
var elementTags = ["Google", 4, "Wikipedia", "Yahoo!", "Cindy"];
var _s32 = (Math.sqrt(3)/2);
var A = 75;
var _counter = 0;
var xDiff;
var yDiff;
var pointData = [[A+xDiff, 0+yDiff], [A/2+xDiff, (A*_s32)+yDiff], [-A/2+xDiff, (A*_s32)+yDiff], [-A+xDiff, 0+yDiff],
[-A/2+xDiff, -(A*_s32)+yDiff], [A/2+xDiff, -(A*_s32)+yDiff], [A+xDiff, 0+yDiff]];
var svgContainer = d3.select("body") //create container
.append("svg")
.attr("width", 1000)
.attr("height", 1000);
var enterElements = svgContainer.selectAll("path.area") //draw elements
.data([pointData]).enter().append("path")
.style("fill", "#ff0000")
.attr("d", d3.svg.area());
我想要做的是为每个elementTags
值创建一个新的六边形。每个新的六边形应该有一个随机的xDiff和yDiff,每次_counter
的值应该增加1。
答案 0 :(得分:1)
你需要使用循环。这是修改后的代码:
var elementTags = ["Google", 4, "Wikipedia", "Yahoo!", "Cindy"];
var _s32 = (Math.sqrt(3)/2);
var A = 75;
var svgContainer = d3.select("body") //create container
.append("svg")
.attr("width", 1000)
.attr("height", 1000);
for (index = 0; index < elementTags.length; index++) {
var xDiff = Math.random()*100+100;
var yDiff = Math.random()*100+100;
var pointData = [
[A+xDiff, 0+yDiff]
, [A/2+xDiff, (A*_s32)+yDiff]
, [-A/2+xDiff, (A*_s32)+yDiff]
, [-A+xDiff, 0+yDiff]
, [-A/2+xDiff, -(A*_s32)+yDiff]
, [A/2+xDiff, -(A*_s32)+yDiff]
, [A+xDiff, 0+yDiff]
];
var enterElements = svgContainer.selectAll("path.area") //draw element
.data([pointData]).enter().append("path")
.style("fill", "#ff0000")
.attr("d", d3.svg.area());
}
它正在做你想要的吗?
答案 1 :(得分:0)
我有类似的情况,在this question中描述。我把一个代码示例放在一起,你可以在这里找到: http://bl.ocks.org/explunit/4659227
关键思想是在每个数据点的追加期间可以调用路径生成函数:
svg.selectAll("path")
.data(nodes).enter().append("svg:path")
.attr("d", function(d) { return flow_shapes[d.NodeType](d.height, d.width);})
很难从你的代码中看出来,但看起来你可能试图在一个循环中调用.append而不是构建你的数据,然后让D3在一个语句中添加所有的注释。
将完整的代码放在JSFiddle中可能对您有所帮助,这样我们就可以看到您正在尝试的所有内容。