Ich habe eine Sankey-Plot erstellt in networkD3
Paket. Ich möchte die Farben und Transparenz beider Knoten und Links ändern.Ändern NetzwerkD3 Sankey Plot mit benutzerdefinierten Farben
Meine Daten networkD3_data
wird am Ende angehängt.
Frage 1: Wie ändert man Knotenfarben mit einer benutzerdefinierten Palette?
Ich bin mir nicht sicher, wie Sie die Farben mit einer benutzerdefinierten Palette ändern. Es ist notwendig, dass ich dieselbe Farbpalette verwende, die für jede Knotenquelle spezifisch ist, um mit anderen Plots konsistent zu bleiben, die ich habe.
Derzeit kann ich jeden Quellknoten eine andere Farbe und alle Zielknoten die gleiche Farbe haben, indem Sie NodeGroup
definieren. Das Diagramm unten ist nah dran, was ich will, aber jetzt möchte ich die Farbe jedes Quellknotens selbst bestimmen.
library(networkD3)
sankeyNetwork(Links = networkD3_data$links, Nodes = networkD3_data$nodes, Source = "source", Target = "target", Value = "value", NodeID = "name", NodeGroup="group", fontSize=14)
?sankeyNetwork
sagt ein colourScale
Parameter ist die „Zeichenfolge Angabe die kategorische Farbskala für die Knoten“ annimmt. Ich nahm dies meine ich eine Spalte mit meiner gewünschten Farben an den networkD3_data$nodes
Datenrahmen und rufen colourScale
als solche hinzufügen:
sankeyNetwork(Links = networkD3_data$links, Nodes = networkD3_data$nodes, Source = "source", Target = "target", Value = "value", NodeID = "name", NodeGroup="group", fontSize=14, colourScale="colors")
Aber das funktioniert nicht, ist keine Handlung erzeugt. Ich suchte stackoverflow und fand eine Antwort von 2014: here, aber ich denke nicht, dass dies funktioniert nicht mehr, da ich einen Fehler Error: unexpected symbol
Aufruf einer dieser vorgeschlagenen Lösungen (oder vielleicht weiß ich einfach nicht, wie dies richtig implementieren).
d3.scale.ordinal().range(["#7d3945","#e0677b", "#244457"])
d3.scaleOrdinal().range(["#7d3945","#e0677b", "#244457"])
Frage 2: Ist es möglich, die Reihenfolge, in der die Quelle und Ziele angezeigt werden, zu definieren?
So dass Quellen von Source0 bis Source10 und Ziele von Target11 bis Target47 aufgeführt sind? Wo ist das Set? Ich weiß, dass dies kontraintuitiv ist, damit der Algorithmus die Knoten optimal positionieren kann.
Frage 3: Wie ändert man Linkfarben mit einer benutzerdefinierten Palette und ändert Transparenz/Deckkraft?
Ich möchte auch die Links von der Quelle farbcodieren, die das gleiche Farbschema wie die Quelle verwenden. Ich kann dies tun, indem ich LinkGroup
definiere, siehe unten. Wieder bin ich nah dran, was ich will, aber ich muss nur die Farben angeben, die ich selbst benutze, und ich bin mir nicht sicher, wo ich das ändern soll. Ich möchte auch die Deckkraft so einstellen, dass die Quellfarbe fester ist als die Linkfarben.
sankeyNetwork(Links = networkD3_data$links, Nodes = networkD3_data$nodes, Source = "source", Target = "target", Value = "value", NodeID = "name", NodeGroup="group", LinkGroup="group", fontSize=14)
Hier sind meine Daten - dput(networkD3_data)
structure(list(nodes = structure(list(name = c("Source0", "Source1",
"Source2", "Source3", "Source4", "Source5", "Source6", "Source7",
"Source8", "Source9", "Source10", "Target11", "Target12", "Target13",
"Target14", "Target15", "Target16", "Target17", "Target18", "Target19",
"Target20", "Target21", "Target22", "Target23", "Target24", "Target25",
"Target26", "Target27", "Target28", "Target29", "Target30", "Target31",
"Target32", "Target33", "Target34", "Target35", "Target36", "Target37",
"Target38", "Target39", "Target40", "Target41", "Target42", "Target43",
"Target44", "Target45", "Target46", "Target47"), group = c("Source0",
"Source1", "Source2", "Source3", "Source4", "Source5", "Source6",
"Source7", "Source8", "Source9", "Source10", "Target", "Target",
"Target", "Target", "Target", "Target", "Target", "Target", "Target",
"Target", "Target", "Target", "Target", "Target", "Target", "Target",
"Target", "Target", "Target", "Target", "Target", "Target", "Target",
"Target", "Target", "Target", "Target", "Target", "Target", "Target",
"Target", "Target", "Target", "Target", "Target", "Target", "Target"
), colors = c("#9E0142", "#D53E4F", "#F46D43", "#FDAE61", "#FEE08B",
"#FFFFBF", "#E6F598", "#ABDDA4", "#66C2A5", "#3288BD", "#5E4FA2",
"#969696", "#969696", "#969696", "#969696", "#969696", "#969696",
"#969696", "#969696", "#969696", "#969696", "#969696", "#969696",
"#969696", "#969696", "#969696", "#969696", "#969696", "#969696",
"#969696", "#969696", "#969696", "#969696", "#969696", "#969696",
"#969696", "#969696", "#969696", "#969696", "#969696", "#969696",
"#969696", "#969696", "#969696", "#969696", "#969696", "#969696",
"#969696")), .Names = c("name", "group", "colors"), row.names = c(NA,
-48L), class = "data.frame"), links = structure(list(source = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6,
6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10
), target = c(11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 13, 18, 15, 11, 12, 24, 21, 25, 26, 27, 19, 28, 16, 22, 29,
30, 31, 32, 18, 16, 15, 13, 27, 29, 19, 33, 34, 31, 35, 21, 24,
11, 30, 36, 28, 37, 38, 39, 40, 26, 41, 11, 12, 15, 18, 19, 14,
13, 16, 27, 34, 20, 22, 25, 12, 27, 16, 18, 13, 11, 12, 11, 14,
27, 21, 16, 18, 22, 13, 15, 19, 16, 11, 12, 39, 12, 14, 18, 11,
42, 43, 44, 13, 11, 18, 15, 12, 19, 45, 31, 16, 20, 46, 40, 47,
11, 12, 18, 16, 14, 19, 15, 11, 12, 16, 13, 18, 14, 34, 31, 15
), value = c(5.8, 3.2, 5, 2.4, 2.5, 2.7, 3.5, 2.5, 3.5, 1.4,
2.9, 2.4, 1.3, 12.1, 7.4, 5, 11.2, 5.6, 6.4, 8.8, 2.6, 3.5, 7,
10, 4.5, 6, 6.5, 5.8, 5.4, 6.2, 8.9, 5.5, 4.8, 3.4, 6.5, 5, 4,
6.4, 7.3, 4.4, 4.2, 1.7, 5.1, 3.6, 6.4, 3.4, 2.5, 2.6, 2.3, 2.3,
3.2, 1.6, 1.7, 3.7, 8, 4.4, 3.1, 4.1, 5.9, 2.8, 5, 3.2, 3.7,
3.4, 1.8, 3.2, 1.2, 4.1, 5.2, 4.5, 4.8, 7.1, 7.3, 4.6, 8.4, 3.4,
5.2, 6.1, 4.3, 4.5, 4.5, 6.5, 2.8, 6.3, 5.3, 8.2, 3.8, 4.3, 4.2,
3.4, 5.4, 7.9, 1.2, 1.4, 1.4, 6.6, 6.8, 4.2, 2.9, 3.1, 5.3, 2.6,
3.2, 2.9, 1.7, 1.9, 1.4, 8, 8, 4, 5, 4.3, 2.9, 6.9, 3, 8.7, 4.5,
4.2, 6.6, 4.4, 2.7, 4.4, 4.3, 2.8), group = c("Source0", "Source0",
"Source0", "Source0", "Source0", "Source0", "Source0", "Source0",
"Source0", "Source0", "Source0", "Source0", "Source0", "Source1",
"Source1", "Source1", "Source1", "Source1", "Source1", "Source1",
"Source1", "Source1", "Source1", "Source1", "Source1", "Source1",
"Source1", "Source1", "Source1", "Source1", "Source1", "Source2",
"Source2", "Source2", "Source2", "Source2", "Source2", "Source2",
"Source2", "Source2", "Source2", "Source2", "Source2", "Source2",
"Source2", "Source2", "Source2", "Source2", "Source2", "Source2",
"Source2", "Source2", "Source2", "Source2", "Source3", "Source3",
"Source3", "Source3", "Source3", "Source3", "Source3", "Source3",
"Source3", "Source3", "Source3", "Source3", "Source3", "Source4",
"Source4", "Source4", "Source4", "Source4", "Source4", "Source5",
"Source5", "Source5", "Source5", "Source5", "Source5", "Source5",
"Source5", "Source5", "Source5", "Source5", "Source6", "Source6",
"Source6", "Source6", "Source7", "Source7", "Source7", "Source7",
"Source7", "Source7", "Source7", "Source8", "Source8", "Source8",
"Source8", "Source8", "Source8", "Source8", "Source8", "Source8",
"Source8", "Source8", "Source8", "Source9", "Source9", "Source9",
"Source9", "Source9", "Source9", "Source9", "Source9", "Source10",
"Source10", "Source10", "Source10", "Source10", "Source10", "Source10",
"Source10", "Source10")), .Names = c("source", "target", "value",
"group"), row.names = c(NA, -124L), class = "data.frame")), .Names = c("nodes",
"links"))
Vielen Dank! Ich verstehe jetzt, warum ich diesen Fehler bekommen habe: "Fehler: unerwartetes Symbol in" d3.scaleOrdinal(). Range "' wenn ich 'd3.scaleOrdinal(). Range ([" # 7d3945 "," # e0677b "," " # 244457 "])' oben, soll es in Anführungszeichen eingeschlossen sein '' d3.scaleOrdinal(). Range (["# 7d3945", "# e0677b", "# 244457"]) ''. Meine Follow-up Frage ist, ob wir die Links Farben unabhängig von den Farben der Knoten einrichten können? 'colourScale' sagt, dass es die Farbskala für die Knoten spezifiziert, aber es scheint, dass die Links die Farbe erben, wenn LinkGroup definiert ist, aber kann es unabhängig eingestellt werden? Oder kann die Transparenz verändert werden? – Djork
Und die zweite Frage, gibt es eine Möglichkeit, die Reihenfolge der Quellknoten Source0-Source10 beizubehalten, aber den Algorithmus die Zielknoten optimal positionieren zu lassen? – Djork
Transparenz ist hart in den JS codiert, also nein, nicht leicht. Sie können htmlwidget-Funktionen verwenden, um nach dem Laden zusätzliche JS-Dateien zu importieren, die alle Links auswählen und ihre Transparenz nach der ersten Generierung festlegen können. –