【发布时间】:2012-05-23 11:48:34
【问题描述】:
我对 SVG 和 d3.js 有点陌生。
在使用 D3 力布局绘制图形时,我使用了一个简单的对角线生成器并使用 marker-end 来绘制箭头。
当使用弧线而不是对角线生成器时,箭头看起来很好。但是使用如下代码中的对角线生成器不会产生正确的标记:
var vis = this.vis = d3.select(el).append("svg:svg")
.attr("width", w)
.attr("height", h);
var force = d3.layout.force()
.gravity(0.03)
.distance(120)
.charge(-800)
.size([w, h]);
var linkDiag = d3.svg.diagonal()
.projection(function(d)
{
return [d.x, d.y];
});
vis.append("svg:defs")
.selectAll("marker")
.data(["normal", "special", "resolved"])
.enter()
.append("svg:marker")
.attr("id", String)
.attr("viewBox", "0 -5 10 10")
.attr("refX", 15)
.attr("refY", -1.5)
.attr("markerWidth", 6)
.attr("markerHeight", 6)
.attr("orient", "auto")
.append("svg:path")
.attr("d", "M 0,-5 L 10,0 L0,5");
...然后还有:
force.on("tick", function() {
link.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; })
.attr("d", linkDiag)
.attr("marker-end", function(d) { return "url(#special)"; });
});
标记与顶点完全不同。
任何帮助将不胜感激!
【问题讨论】:
-
你有没有机会解决这个问题?在我的例子中,我意识到我的圆形节点很大并且标记正在被渲染,但总是在圆圈后面渲染。不过,我仍然遇到问题,尽管确定标记的正确 refX、refY 等值:/
-
我也很好奇是否有解决办法。
标签: svg d3.js marker force-layout