Ich versuche, meinen Datenfluss mit einem Sankey-Diagramm in R zu visualisieren.
Ich habe diesen Blog-Beitrag gefunden , der auf ein R-Skript verweist, das ein Sankey-Diagramm erstellt. Leider ist es ziemlich roh und etwas eingeschränkt (Beispielcode und Daten siehe unten).
Kennt jemand andere Skripte - oder vielleicht sogar ein Paket -, das weiter entwickelt ist? Mein Endziel ist es, sowohl den Datenfluss als auch die Prozentsätze nach relativer Größe der Diagrammkomponenten zu visualisieren, wie in diesen Beispielen für Sankey-Diagramme .
Ich habe eine ähnliche Frage auf der R- Hilfeliste gepostet , aber nach zwei Wochen ohne Antwort versuche ich mein Glück hier auf Stackoverflow.
Danke, Eric
PS. Ich kenne den Plot für parallele Mengen , aber das ist nicht das, wonach ich suche.
# thanks to, https://tonybreyal.wordpress.com/2011/11/24/source_https-sourcing-an-r-script-from-github/
sourc.https <- function(url, ...) {
# install and load the RCurl package
if (match('RCurl', nomatch=0, installed.packages()[,1])==0) {
install.packages(c("RCurl"), dependencies = TRUE)
require(RCurl)
} else require(RCurl)
# parse and evaluate each .R script
sapply(c(url, ...), function(u) {
eval(parse(text = getURL(u, followlocation = TRUE,
cainfo = system.file("CurlSSL", "cacert.pem",
package = "RCurl"))), envir = .GlobalEnv)
} )
}
# from https://gist.github.com/1423501
sourc.https("https://raw.github.com/gist/1423501/55b3c6f11e4918cb6264492528b1ad01c429e581/Sankey.R")
# My example (there is another example inside Sankey.R):
inputs = c(6, 144)
losses = c(6,47,14,7, 7, 35, 34)
unit = "n ="
labels = c("Transfers",
"Referrals\n",
"Unable to Engage",
"Consultation only",
"Did not complete the intake",
"Did not engage in Treatment",
"Discontinued Mid-Treatment",
"Completed Treatment",
"Active in \nTreatment")
SankeyR(inputs,losses,unit,labels)
# Clean up my mess
rm("inputs", "labels", "losses", "SankeyR", "sourc.https", "unit")
Sankey-Diagramm mit dem obigen Code erstellt,
quelle
Antworten:
Dieses Diagramm kann über das
networkD3
Paket erstellt werden. Sie können damit interaktive Sankey-Diagramme erstellen. Hier finden Sie ein Beispiel . Ich habe auch einen Screenshot hinzugefügt, damit Sie eine Vorstellung davon haben, wie es aussieht.quelle
htmlwidgets
ist der Sankey-Plot aus demnetworkD3
Paket. Ich habe den Beitrag aktualisiert.Ich habe ein Paket ( Riverplot ) erstellt, das im Vergleich zur Sankey-Funktion eine etwas andere, aber überlappende Funktionalität aufweist und Diagramme wie dieses erstellen kann:
quelle
Wenn Sie es mit R tun möchten, scheint Ihr bestes Gebot @Roman Vorschlag zu sein - hacken Sie die SankeyR- Funktion. Zum Beispiel - unten ist meine sehr schnelle Lösung - richten Sie Beschriftungen einfach vertikal aus, versetzen Sie sie leicht und verringern Sie die Schriftart für Eingabeverweise, damit sie ein bisschen besser aussehen. Diese Änderung ändert nur die Zeilen 171 und 223 in der SankeyR- Funktion:
Ich bin kein Ass in Trigonometrie, aber das ist wirklich das, was Sie brauchen, um die Richtung der Pfeile zu ändern. Das wäre aus meiner Sicht ideal - wenn Sie lose Pfeile so einstellen könnten, dass sie horizontal und nicht vertikal ausgerichtet sind. Wenn meine Lösung das Problem mit der Ausrichtung der Beschriftungen behebt, ist das Diagramm sonst nicht viel lesbarer ...
quelle
Zusätzlich zu rCharts können Sankey- Diagramme jetzt auch in R mit googleVis (Version> = 0.5.0) generiert werden . In diesem Beitrag wird beispielsweise die Erstellung des folgenden Diagramms mit googleVis beschrieben:
quelle
Rs alluvialPaket wird dies auch tun (von
?alluvial
).quelle
Plotly hat die gleiche Leistung wie das
networkD3
Paket ( Beispiellink ).quelle
Nach diesen Definitionen zu urteilen , fehlt dieser Funktion wie dem Diagramm der parallelen Mengen die Fähigkeit, Flüsse zu teilen und zu kombinieren (dh durch mehr als einen Übergang).
Da es sich bei Sankey-Diagrammen um gerichtete gewichtete Diagramme handelt , kann ein Paket wie qgraph hilfreich sein.
Die
SankeyR
Funktion bietet klarere Beschriftungen, wenn Sie die Verluste in absteigender Reihenfolge sortieren, wenn der Text näher an den Pfeilspitzen platziert wird, ohne sich zu überlappen.quelle
Werfen Sie einen Blick auf //sankeybuilder.com, da es eine sofort einsatzbereite Lösung bietet, mit der Sie Ihre Daten hochladen und Variationen im Laufe der Zeit wiedergeben können. Der Übergang funktioniert gut (ähnlich der Youtube-Demo in Ihrer Frage). Wenn Sie die SankeyTrend-Demo laden, enthält sie viele Zeitfenster (Datenjahre). Klicken Sie nach dem Laden (erstellt Sankeys automatisch) auf die Wiedergabetaste in der oberen rechten Ecke der Seite, um die Zeitfenster wiederzugeben. Sie können sogar die Zeit anhalten und fortsetzen. Die Demo-URL ist hier: SankeyTrend Hoffe, dies hilft Ihnen bei der Suche nach dem perfekten Sankey-Diagramm.
quelle
Der Vollständigkeit halber gibt es auch das
ggalluvial
Paketggplot2 extension
für alluviale / Sankey-Diagramme.Hier ist ein Beispiel aus der Dokumentation des Pakets
Erstellt am 13.11.2018 vom reprex-Paket (v0.2.1.9000)
quelle
Öffnen Sie einfach ein Paket mit offenen Quellen, das ein alluviales Diagramm zur Visualisierung der Workflow-Phasen verwendet. Da die Geschichte bei Verwendung der Schwemmlandform beibehalten wird, gibt es keine Überkreuzungen an den Rändern.
https://github.com/claytontstanley/shiny.alluvial
quelle