Frage Sankey Diagramme in R?


Ich versuche meinen Datenfluss mit einem Sankey-Diagramm in R zu visualisieren.

ich fand dieser Blogbeitrag die Verbindung zu einem R-Skript, das ein Sankey-Diagramm erzeugt, ist leider ziemlich roh und etwas eingeschränkt (siehe unten für Beispielcode und Daten).

Kennt jemand andere Skripts - oder vielleicht sogar ein Paket -, das mehr entwickelt ist? Mein Endziel ist es, sowohl den Datenfluss als auch die Prozentsätze anhand der relativen Größe von Diagrammkomponenten zu visualisieren, wie in diese Beispiele von Sankey-Diagrammen.

Ich habe gepostet eine ähnliche Frage in der r-help-Liste, aber nach zwei Wochen ohne irgendwelche Antworten versuche ich mein Glück hier auf stackoverflow.

Vielen Dank, Eric

PS. Ich bin mir der bewusst Parallele Sätze Plot, 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 produziert, Sankey Diagram produced with the code above


75
2018-04-01 21:17


Ursprung


Antworten:


Diese Handlung kann durch die erstellt werden networkD3 Paket. Es ermöglicht Ihnen, interaktive Sankey-Diagramme zu erstellen. Hier finden Sie ein Beispiel. Ich habe auch einen Screenshot hinzugefügt, damit Sie eine Idee haben, wie es aussieht.

enter image description here


52
2018-03-18 14:13



Wenn du es mit R machen willst, ist dein bestes Gebot @Roman suggestion - hack the SankeyR Funktion. Zum Beispiel - unten ist meine sehr schnelle Lösung - orientieren Sie einfach die Beschriftungen vertikal, verschieben Sie sie leicht und verringern Sie die Schrift für die Eingabefragmente, damit sie ein wenig besser aussieht. Diese Änderung ändert nur die Zeile 171 und 223 in der SankeyR Funktion:

    #line171 - change oversized font size of input label
    fontsize = max(0.5,frInputs[j]*1.5)#1.5 instead of 2.5 

    #line223 - srt changes from 35 to 90 to orient labels vertically, 
    #and offset adjusts them to get better alignment with arrows
    text(txtX, txtY, fullLabel, cex=fontsize, pos=4, srt=90, offset=0.1)

enter image description here

Ich bin kein Experte in Trigonometrie, aber das ist wirklich, was Sie brauchen, um die Richtung der Pfeile zu ändern. Das wäre meiner Meinung nach ideal - wenn Sie die Pfeile korrigieren könnten, so dass sie horizontal und nicht vertikal ausgerichtet sind. Ansonsten, warum meine Lösung das Problem mit der Orientierung der Etiketten behebt, macht es das Diagramm nicht viel lesbarer.


36
2018-04-04 13:54



Ich habe ein Paket erstellt (Flussplot) die eine etwas andere, aber sich überschneidende Funktionalität im Vergleich zur Sankey-Funktion hat und solche Diagramme erzeugen kann:

enter image description here


36
2018-03-03 13:35



Zusätzlich zu rCharts, Sankey Diagramme können nun auch in R mit erzeugt werden googleVis (Version> = 0.5.0). Zum Beispiel, dies Post beschreibt die Generierung des folgenden Diagramms mit googleVis: enter image description here


20
2017-11-04 00:40



Rs  Paket wird dies auch tun (von ?alluvial).

# install.packages(c("alluvial"), dependencies = TRUE)
require(alluvial)

# Titanic data
tit <- as.data.frame(Titanic)

# 4d
alluvial( tit[,1:4], freq=tit$Freq, border=NA,
     hide = tit$Freq < quantile(tit$Freq, .50),
     col=ifelse( tit$Class == "3rd" & tit$Sex == "Male", "red", "gray") )

enter image description here


12
2018-04-25 12:30



plot hat die gleiche Kraft wie networkD3 Paket (Beispielverbindung).

enter image description here


8
2017-07-28 03:15



Gemessen an diese Definitionen Diese Funktion, wie die Parallelsätze Plot, fehlt die Fähigkeit, Flüsse zu teilen und zu kombinieren (d. h. durch mehr als einen Übergang).

Schon seit Sankey-Diagramme sind gerichtete gewichtete Graphenein Paket wie qgraph könnte nützlich sein.

Das SankeyR Die Funktion bietet klarere Beschriftungen, wenn Sie die Verluste in absteigender Reihenfolge sortieren, da der Text näher an den Pfeilspitzen platziert wird, ohne sich zu überlappen.


6
2018-04-03 23:16



schau es dir an //sankeybuilder.com Da es sich um eine sofort einsatzbereite Lösung handelt, können Sie Ihre Daten und Wiedergabevariationen im Laufe der Zeit hochladen. Der Übergang funktioniert gut (ähnlich wie bei der Youtube-Demo in Ihrer Frage). Wenn Sie die SankeyTrend-Demo laden, enthält sie viele Zeitfenster (Datenjahre). Einmal geladen (erstellt automatisch), klicken Sie auf die Wiedergabe-Schaltfläche in der oberen rechten Ecke der Seite für die Wiedergabe der Zeitfenster, Sie können sogar die Zeit anhalten und fortsetzen. Demo-URL ist hier: SankeyTrend Hoffe, das hilft Ihnen bei der Suche nach dem perfekten Sankey-Diagramm.


5
2018-03-21 12:26