2016-12-25 3 views
1

In Bezug auf D3 Sankey (https://bost.ocks.org/mike/sankey/), wollte ich erkundigen über die Art und Weise, die Knoten mit einer kategorialen Variable in JSON-Datei zu färben.JSON-basierte Färbung von Knoten in sankey.js

Link zur JSON-Datei in den eigentlichen Code verwendet wird: https://bost.ocks.org/mike/sankey/energy.json

deshalb Meine Frage ist, dass, wenn ich liefern einige Informationen zur Kategorie der „name“ im Zusammenhang:

{"name":"Solar PV", "category":"A"}, 
{"name":"Solar Thermal","category":"A"}, 
{"name":"Solar","category":"B"}, 
{"name":"Tidal","category":"C"}, 
{"name":"UK land based bioenergy","category":"A"}, 
{"name":"Wave","category":"A"}, 
{"name":"Wind","category":"B"} 

Und was dann Es sollten Änderungen am Quellcode vorgenommen werden, um die Knoten entsprechend der Kategorie zu färben. P.S: Nicht ein Experte in D3/JS, bitte entschuldigen Sie meine begrenzten Fähigkeiten, wenn diese Frage zu naiv erscheint.

Dank

+0

Danke für die Bearbeitung und Ihre vorherigen Kommentar Gerardo. Ich war eigentlich auf der Suche nach Färbung Knoten mit einer kategorialen Variable in JSON (mehrere Knoten können die gleiche Farbe bekommen), so dass eine Legende der Kategorie Knoten würde den Sankey informativer. Erhalten Sie Hinweise von Ihrem Kommentar, ich versuche, die Lösung zu nähern. Dank –

Antwort

3

Im verknüpft Beispiel werden Sie diesen Codeblock siehe:

node.append("rect") 
    .attr("height", function(d) { return d.dy; }) 
    .attr("width", sankey.nodeWidth()) 
    .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); }); 

die mit .style("fill" Linie ersetzen:

.style("fill", function(d) { return d.color = color(d.category); }) 
+0

Dank Mark ... tat das gleiche gestern. –

+0

Hallo, Ich war neugierig, wenn man die Sankey-Knoten in konzentrischen Kreisen arrangieren kann (wie es inhärent die Knoten in einem hierarchischen Format organisiert). –

+0

@NaSu, nichts in das Sankey-Plugin eingebaut wird das für Sie tun. Aus einem Kommentar im Quelltext: '// Knoten erhalten die maximale Breite von eingehenden Nachbarn plus eins; // Knoten ohne eingehende Links erhalten die Breite null, während // Knoten ohne ausgehende Links die maximale Breite zugewiesen bekommen. Vielleicht möchten Sie etwas, das dem [Radialbaum] ähnelt (https://bl.ocks.org/mbostock)/4063550). – Mark

3

In Code Bostock ist, ist dies die Linie das färbt die Rechtecke ein:

.style("fill", function(d) { 
    return d.color = color(d.name.replace(/ .*/, "")); 
}) 

So ändern Sie einfach das zu:

.style("fill", function(d) { 
    return d.color = color(d.category); 
}) 
+1

Danke Gerardo ... tat das gleiche –