リンクのサイズとそれに関連する矢印のサイズを値 (1 ~ 3) に基づいて変更しようとしている d3 強制有向グラフに次のコードがあります。ストロークの太さは値によって変化しますが、矢印は正しい位置に留まりません。ストロークの太さが 1 から 3 に変わると、端から後ろに移動する傾向があります。ストロークの値を変更するときに矢印 (マーカー) を適切に整列させる方法についてのアイデアはありますか? どうもありがとう!
var link = vis.selectAll("line.link")
.data(json.links)
.enter().append("svg:line")
.attr("class", "link")
.style("stroke-width", function(d) { return Math.sqrt(d.value); })
.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("marker-end", "url(#arrowGray)")
.on("click", function(d) {
link.style("stroke","#dddddd");
node.style("stroke","#FFFFFF");
d3.select(this).style("stroke","red");
link.attr("marker-end", null);
link.attr("marker-end", "url(#arrowGray)");
d3.select(this).attr("marker-end", null);
d3.select(this).attr("marker-end", "url(#arrowRed)");
clickLink(d);
});
defs.append("svg:marker")
.attr("id", "arrowGray")
.attr("viewBox","0 0 10 10")
.attr("refX","20")
.attr("refY","5")
.attr("markerUnits","strokeWidth")
.attr("markerWidth","9")
.attr("markerHeight","5")
.attr("orient","auto")
.append("svg:path")
.attr("d","M 0 0 L 10 5 L 0 10 z")
.attr("fill", "#BBBBBB");