Sono un po 'nuovo per SVG e d3.js.I marcatori SVG non si orientano correttamente su una curva d3.svg.diagonal utilizzata come collegamento di layout forza D3
Mentre si disegna un grafico con il layout di forza D3, sto usando un semplice generatore di linee diagonali e usando il pennarello per disegnare le punte delle frecce.
Quando si utilizza l'arco al posto del generatore di diagonale, le testine di freccia vengono visualizzate correttamente. Ma utilizzando generatore diagonale come nel seguente codice non produce marcatori appropriati:
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");
... e poi anche:
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)"; });
});
I marcatori non sono orientate a tutti i vertici.
Qualsiasi aiuto sarebbe apprezzato!
Qualche possibilità sei riuscito a risolvere? Nel mio caso, mi sono reso conto che i miei nodi circolari erano grandi e il marcatore era stato reso, ma sempre reso dietro il cerchio. Sto ancora avendo problemi, tuttavia, determinando i valori refX, refY, ecc. Appropriati per il marker però:/ – dchang
Sono curioso di sapere se c'è una soluzione a questo. –