私はSVGとd3.jsで少し新しいです。SVGマーカーがD3の強制レイアウトリンクとして使用されているd3.svg対角カーブ上に正しく配置されていない
グラフをD3フォースレイアウトで描画しているとき、私は単純な対角線ジェネレータを使用しており、マーカーの端を使って矢印の頭を描いています。
対角ジェネレータの代わりにアークを使用すると、矢印の頭がうまく表示されます。しかし、適切なマーカーを生成しません下記のコードのように斜めの発電機を使用して:
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などの値を決定しています。/ – dchang
これに対する解決策がある場合は、私も興味があります。 –