我正在使用D3绘制有向非循环图,我希望能够通过将边(和箭头)的颜色更改为该路径来突出显示所选节点的路径.我很容易改变边缘颜色,但我无法弄清楚如何改变相应箭头的颜色.我发现的
most applicable source表明这是不可能的,但它也是从大约两年前开始的,所以我希望看看情况是否有所改变.我用来创建链接,箭头和更新链接颜色的代码如下:
graph.append("svg:defs").selectAll("marker") .data(["end"]) .enter().append("svg:marker") .attr("id",String) .attr("viewBox","0 -5 10 10") .attr("refX",20) .attr("refY",0) .attr("markerWidth",6) .attr("markerHeight",6) .attr("orient","auto") .style("fill","gray") .append("svg:path") .attr("d","M0,-5L10,0L0,5"); . . . var link = graph.append("svg:g").selectAll("line") .data(json.links) .enter().append("svg:line") .style("stroke","gray") .attr("class","link") .attr("marker-end","url(#end)"); . . . function highlightPath(node) { d3.selectAll("line") .style("stroke",function(d) { if (d.target.name == node) { highlightPath(d.source.name); return "lightcoral"; } else { return "gray"; } }); }
任何建议都会很棒.谢谢.
解决方法
创建一个函数并给它一个返回值,val应该是动态的:
function marker (color) { var val; graph.append("svg:defs").selectAll("marker") .data([val]) .enter().append("svg:marker") .attr("id",String) .attr("viewBox","0 -5 10 10") .attr("refX",20) .attr("refY",0) .attr("markerWidth",6) .attr("markerHeight",6) .attr("orient","auto") .style("fill",color) .append("svg:path") .attr("d",5"); return "url(#" +val+ ")"; } var link = graph.append("svg:g").selectAll("line") .data(json.links) .enter().append("svg:line") .style("stroke","gray") .attr("class","link") .attr("marker-end",marker); //"url(#end)"