
Sankey-Diagramme werden häufig zur Veranschaulichung von Strömen verwendet, z. B. von Behandlungsänderungen in der Medizin. Das obige Diagramm veranschaulicht die Behandlungsänderungen bei Asthmapatienten. Einige kleine Ströme sind ausgelassen.
Dank des network3D-Pakets macht das Erstellen von Sankey-Plots jetzt richtig Spaß! Durch die Implementierung von Java-Skripten können sie interaktiv sein.
Bei der Verwendung dieses Pakets gibt es jedoch einige Fallen. Die wichtigste ist, dass sich die Farben von Plot zu Plot ändern. Wir müssen sie über die Funktion d3.scaleOrdinal() übergeben und uns um die fehlenden Farben kümmern. Sie können den folgenden Code verwenden:
colors.list<-c("#FFC312","#C4E538","#12CBC4","#FDA7DF","#ED4C67",
"#F79F1F","#A3CB38","#1289A7","#D980FA","#B53471",
"#EE5A24","#009432","#0652DD","#9980FA","#833471",
"#EA2027","#006266","#1B1464","#5758BB","#6F1E51",
"#747d8c")
##Definieren Sie 21 Typen für Farben
types.list<-c("Typ 0", "Typ 1", "Typ 2", "Typ 3",
"typ 4", "typ 5 ", "typ 6 ", "typ 7", "typ 8 ", "typ 9",
"Typ 10", "Typ 11", "Typ 12", "Typ 13", "Typ 14", "Typ 15",
"Typ 16", "Typ 17", "Typ 18", "Typ 19", "Typ 20")
Farben <- paste(colors.list[which.not.missing], collapse = '", "')
types <- paste(types.list[which.not.missing], collapse = '", "')
##Farben in JS-Form in der Funktion sankeyNetwork vorbereiten
colorJS <- paste('d3.scaleOrdinal() .domain(["', types, '"]).range(["', colors, '"])')
Dann übergeben Sie es über sankeyNetwork:
sankeyNetwork(Links = links, Nodes = nodes,
Quelle = "Quelle", Ziel = "Ziel",
Wert = "Wert", NodeID = "Name",
fontSize= 12, nodeWidth = 10,
colourScale=colorJS,NodeGroup="group",
LinkGroup ="Gruppe")
Es ist eine schöne und sehr praktische Idee, Multistate-Modelle zu kombinieren, um die interessierenden Ströme zu erzeugen (siehe etm-Paket in R!).
library(etm)
tr.prob.st 0,], c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22"), tra, s=start,t=stop,cens.name = NULL)
#1TP3Nun berechnen wir die Wahrscheinlichkeiten von der Start- bis zur Stoppzeit
probst<-summary(tr.prob.st)
probst<-do.call(rbind,probst)
for.plot<-probst[probst$time==stop,]
##Nun können wir Links für Sankey-Plot erstellen
links.st<-round(for.plot$P*100,digits=0)
Da es sich bei der Ergebnisdarstellung von Sankey um ein Widget handelt, können Sie es mit dem folgenden Code speichern:
p<-sankeyNetwork(Links = links, Nodes = nodes,
Quelle = "Quelle", Ziel = "Ziel",
Wert = "Wert", NodeID = "Name",
fontSize= 12, nodeWidth = 10,
colourScale=my_color,NodeGroup="group",
LinkGroup="Gruppe")
saveWidget(p, pat, selfcontained = F, libdir = "lib")
Self-contained=F speichert es zusammen mit den abhängigen Java-Skripten in der Bibliothek. Sie können die Option Self-contained=T wählen, dann wird das Skript in die resultierende HTML-Datei aufgenommen.
Leider gibt es keine automatische Möglichkeit, Zahlen neben den Knotennamen zu erhalten. Daher müssen Sie einen Trick anwenden und die Zahlen mit der Funktion paste() als Teil des Knotennamens einfügen.
Die nächste schöne Sache über das network3D-Paket ist, dass es leicht in Shiny implementiert werden kann, so dass Sie Ihr eigenes Dashboard zur Erstellung von Sankey-Plots haben können.
Wenn Sie Hilfe brauchen, schreiben Sie mir in den Kommentaren!
Viel Spaß!