Масштабирование стрелки на маркере ссылки силового макета D3

У меня есть следующий код в графе, ориентированном на силу d3, где я пытаюсь изменить размер ссылок и связанных с ними стрелок на основе значения (от 1 до 3). Толщина штриха меняется со значением, но стрелки не остаются в правильном положении. Он имеет тенденцию смещаться от конца, когда толщина штриха изменяется, скажем, с 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");
10
задан VividD 16 June 2014 в 14:56
поделиться