我正在尝试对路径进行一些修改,使用D3以编程方式定义。我想做的改变很简单,修改路径的不透明度。我遇到的问题是当路径本身发生变化时,结束标记不会,而且我不太确定如何让它这样做。
标记定义如下:
// define arrow markers for graph links
svg.append('svg:defs').append('svg:marker')
.attr('id', 'end-arrow')
.attr('viewBox', '0 -5 10 10')
.attr('refX', 6)
.attr('markerWidth', 3)
.attr('markerHeight', 3)
.attr('orient', 'auto')
.append('svg:path')
.attr('d', 'M0,-5L10,0L0,5')
.attr('fill', '#CCCCCC');
路径:
// Create the links between the nodes
var links = svg.append("g")
.selectAll(".link")
.data(data.links)
.enter()
.append("path")
.attr("class", "link")
.attr("d", sankey.link())
.style('marker-end', "url(#end-arrow)")
.style("stroke-width", function (d) { return Math.max(1, d.dy); })
.sort(function (a, b) { return b.dy - a.dy; });
我用来更改路径的代码,它不会更新标记:
d3.selectAll("path.link")
.filter(function (link) {
// Find all the links that come to/from this node
if (self.sourceLinksMatch(self, link, node)) {
return true;
}
if (self.targetLinksMatch(self, link, node)) {
return true;
}
return false;
})
.transition()
.style("stroke-opacity", 0.5);
有人可以建议我可能需要更改以修改标记结束样式吗?
由于
答案 0 :(得分:21)
修改不透明度而不是笔触不透明度有效..所以
d3.selectAll("path.link")
.transition()
.style("stroke-opacity", 0.5);
变为
d3.selectAll("path.link")
.transition()
.style("opacity", 0.5);
答案 1 :(得分:2)
您应该能够对标记路径定义执行相同的操作:
d3.selectAll("marker path")
.transition()
.style("stroke-opacity", 0.5);
答案 2 :(得分:0)
您可以为箭头标记设置定义预设名称
// build the arrow.
svg.append("svg:defs").selectAll("marker")
.data(["HELPS","HELPED_BY","DAMAGES","REPELS","FAMILY", "KINGDOM"]) // Different link/path types can be defined here
.enter().append("svg:marker") // This section adds in the arrows
.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", "M0,-5L10,0L0,5");
// add the links and the arrows
var path = svg.append("svg:g").selectAll("path")
.data(force.links())
.enter().append("svg:path")
.attr("class", function(d) { return "link " + d.type; })
.attr("marker-end", function(d) { return "url(#" + d.type +")"; });
使用CSS配置各自的样式
marker#HELPS{fill:green;}
path.link.HELPS {
stroke: green;
}
marker#HELPED_BY{fill:#73d216;}
path.link.HELPED_BY {
stroke: #73d216;
}
marker#DAMAGES{fill:red;}
path.link.DAMAGES {
stroke: red;
}