Diagrammes de Sankey en R?
j'essaie de visualiser mon flux de données avec un diagramme de Sankey en R.
j'ai trouvé ce billet de blog lien vers un script R qui produit un diagramme de Sankey, malheureusement il est assez brut et quelque peu limité (voir ci-dessous pour exemple de code et de données).
personne Ne sait d'autres scripts, ou peut-être même un paquet qui est plus développée? Mon but final est de visualiser le flux de données et les pourcentages par taille relative du diagramme composants, comme dans ces exemples de diagrammes de Sankey .
j'ai posté une question quelque peu similaire sur la liste d'aide r , mais après deux semaines sans réponse je tente ma chance ici sur stackoverflow.
Merci, Eric
PS. Je suis au courant de la trame des ensembles parallèles , mais ce n'est pas ce que je cherche.
# 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",
"Referralsn",
"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")
Diagramme de Sankey produit avec le code ci-dessus, Diagram produced with the code above" src="/images/content/9968433/1090503ee428cb323f772745af4bcff4.png">
9 réponses
si vous voulez le faire avec R, votre meilleure offre semble être @Roman suggestion - pirater la fonction SankeyR . Par exemple - ci-dessous est ma solution très rapide-simplement Orienter les étiquettes verticaly, légèrement offset eux et diminuer la police pour les referals d'entrée pour le faire paraître un peu mieux. Cette modification ne modifie que les lignes 171 et 223 de la fonction SankeyR :"
#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)
Je ne suis pas un As en trigonométrie, mais c'est vraiment ce dont vous avez besoin pour changer la direction des flèches. Ce serait idéal à mon avis - si vous pouviez ajuster les flèches des loose de sorte qu'elles soient orientées horizontalement plutôt que verticalement. Sinon, pourquoi ma solution résout le problème avec l'orientation des étiquettes, cela ne rend pas le diagramme beaucoup plus lisible...
R alluvial vont aussi le faire (à partir de ?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") )
plotly a le même pouvoir que networkD3
package ( exemple de lien ).
à en juger par ces définitions cette fonction, comme le diagramme des ensembles parallèles, n'a pas la capacité de diviser et de combiner les flux (c.-à-d. Par plus d'une transition).
depuis les diagrammes de Sankey sont des graphiques pondérés dirigés , un paquet comme qgraph pourrait être utile.
la fonction SankeyR
fournit des étiquettes plus claires si vous triez les pertes dans l'ordre décroissant le texte est placé plus près des flèches sans se chevaucher.
regarder //sankeybuilder.com car il offre un prêt à aller où vous pouvez télécharger vos données et la lecture des variations au fil du temps. La transition fonctionne bien (similaire à la démo youtube dans votre question). Si vous chargez la démo de SankeyTrend, elle inclut de nombreuses plages horaires (années de données). Une fois chargé (construit sankeys automatiquement), cliquez sur le bouton play dans le coin supérieur droit de la page pour la lecture des fentes de temps, vous pouvez même les temps de reprise. L'url de démonstration est ici: SankeyTrend espérons que cela aide votre quête pour le diagramme parfait de Sankey.
vient d'ouvrir un paquet qui utilise un diagramme alluvial pour visualiser les étapes du flux de travail. Puisque l'histoire est conservée lorsque la forme alluviale est utilisée, il n'y a pas de croix dans les bords.