2016-06-21 15 views
3

Ich erstelle ein Sankey-Diagramm mit dem D3 Sankey-Plugin. Ich habe die Standardspalten: Quelle, Ziel, Wert plus eine zusätzliche Spalte namens nodeColor. Ich möchte, dass die Farbe des Zielknotens von der in der Spalte "nodeColorTarget" angegebenen Farbe bestimmt wird. Ich konnte den Quellcode ändern, damit die Knoten alle eine Farbe haben. Ich war jedoch nicht in der Lage, eine Funktion zu entwickeln, um die zusätzliche Spalte zum Vorgeben der Farbe zu verwenden.Ändern der Knotenfarben in d3 Sankey-Diagramm basierend auf einer zusätzlichen Spalte in den Daten

Beispieldaten:

source,target,value,nodeColorTarget 
Dist A,Place1,1,red 
DistB,Place1,5,red 
DistB,Place2,2,grey 
DistB,Place2,1,grey 
DistB,Place3,2,blue 

Bestehende Code:

// add the rectangles for the nodes 
    node.append("rect") 
     .attr("height", function(d) { return d.dy; }) 
     .attr("width", sankey.nodeWidth()) 
     .style("fill", "red") 
     //.style("fill", function(d) { 
      //return d.color = color(d.name.replace(/ .*/, "")); }) 
     //.style("stroke", function(d) { 
     // return d3.rgb(d.color).darker(2); }) 
    //.append("title") 
    // .text(function(d) { 
     // return d.name + "\n" + format(d.value); }); 

Mein vollständiger Code ist here.

+0

Ich aktualisierte die Antwort –

Antwort

3

Als erstes müssen Sie das Attribut wie das hinzuzufügen:

graph.nodes.push({ "name": d.source, "color": d.nodeColorTarget }); 

Dann können Sie es so nennen:

.style("fill", function(d) { return d.color;}) 

dieses Beispiel Siehe: http://plnkr.co/edit/4xPx05PxnWxoQBhIj2lo?p=preview

PS: ich einige tat kleinere Änderungen als die Struktur der Daten geändert

+0

In dem von Ihnen bereitgestellten Beispiel sehe ich, dass sich die Farben geändert haben. Das Diagramm ist jedoch nicht mehr korrekt. Anstatt die Quellen links und die Ziele rechts zu haben, sind sie nun durchsetzt. Zum Beispiel sehen Sie DisB auf der rechten Seite. Darüber hinaus gibt es keine Strömungspfeile zwischen DistB und Place3. Es gibt auch eine Reihe leerer Knoten rechts unten. Irgendeine Idee, wie das zu beheben ist? – Danny

+1

Fixed, ich habe vergessen, die Duplikate zu entfernen, siehe die aktualisierte Geige http://plnkr.co/edit/4xPx05PxnWxoQBhIj2lo?p=preview –

+0

Danke, das funktioniert. Ich habe Ihre Antwort so angepasst, dass sie die spezifischen Code-Snippets enthält, die geändert werden müssen. – Danny