Ich versuche, einige Änderungen an einem Pfad vorzunehmen, der programmgesteuert mit D3 definiert wurde. Die Änderung, die ich vornehmen möchte, ist ziemlich einfach und ändert die Deckkraft des Pfades. Das Problem, das ich habe, ist, während sich der Pfad selbst ändert, der Endmarker nicht, und ich bin mir nicht sicher, wie ich das machen soll.Ändern der SVG-Pfad-Opazität und ihrer Markierung
// 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');
Der Pfad:
wird die Markierung als so definiert
// 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; });
Der Code, den ich die Pfade ändern verwenden, die nicht den Marker nicht aktualisiert:
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);
Kann jemand vorschlagen, was ich ändern muss, um den Marker-Ende-Stil zu ändern?
Dank
dies funktioniert nicht, wenn Sie mehrere Pfade mit der gleichen vordefinierten Marker haben – SumNeuron
'" Deckkraft "' kann beide überschreiben "füllen "und" Schlag "Trübungen. Es ist sicherer, "Stroke-Opacity" und "Fill-Opacity" separat einzustellen. –