Diagtwigs Sankey en R?

Estoy tratando de visualizar mi flujo de datos con un diagtwig de Sankey en R.

Encontré esta publicación de blog vinculada a un guión R que produce un Diagtwig de Sankey, desafortunadamente es bastante crudo y algo limitado (ver a continuación el código de muestra y los datos).

¿Alguien sabe de otros guiones, o tal vez incluso un paquete, que esté más desarrollado? Mi objective final es visualizar tanto el flujo de datos como los porcentajes por tamaño relativo de los componentes del diagtwig, como en estos ejemplos de Diagtwigs Sankey .

Publiqué una pregunta algo similar en la lista de ayuda , pero después de dos semanas sin ninguna respuesta estoy probando suerte aquí en stackoverflow.

Gracias, Eric

PD. Estoy al tanto de la Parcela de Conjuntos Paralelos , pero eso no es lo que estoy buscando.

# 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 Diagram producido con el código anterior, Sankey Diagram producido con el código anterior

Esta ttwig se puede crear a través del paquete networkD3 . Le permite crear diagtwigs de sankey interactivos. Aquí puedes encontrar un ejemplo . También agregué una captura de pantalla para que tengas una idea de cómo se ve.

enter image description here

He creado un paquete ( riverplot ) que tiene una funcionalidad ligeramente diferente, pero superpuesta en comparación con la función Sankey, y puede producir trazados como este:

enter image description here

Si quieres hacerlo con R, tu mejor oferta parece ser la sugerencia de @Roman: piratear la función SankeyR . Por ejemplo, a continuación, mi solución más rápida es: simplemente oriente las tags verticalmente, desdórnelas levemente y disminuya la fuente para los comentarios de entrada para que se vea un poco mejor. Esta modificación solo cambia la línea 171 y 223 en la función 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) 

enter image description here

No soy un as en la trigonometría, pero esto es realmente lo que necesitas para cambiar la dirección de las flechas. Eso sería ideal, desde mi punto de vista, si pudiera ajustar, pierde las flechas para que estén orientadas horizontalmente en lugar de verticalmente. De lo contrario, por qué mi solución corrige el problema con la orientación de las tags, no hace que el diagtwig sea mucho más legible …

Además de rCharts , ahora también se pueden generar diagtwigs de Sankey en R con googleVis (versión> = 0.5.0). Por ejemplo, esta publicación describe la generación del siguiente diagtwig usando googleVis: enter image description here

El paquete aluvial de R también lo hará (desde ?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

plotly tiene la misma potencia que el paquete networkD3 ( enlace de ejemplo ).

enter image description here

A juzgar por estas definiciones, esta función, como la Parcela de conjuntos paralelos, carece de la capacidad de dividir y combinar flujos (es decir, a través de más de una transición).

Como los diagtwigs de Sankey son gráficos ponderados dirigidos , un paquete como qgraph podría ser útil.

La función SankeyR proporciona tags más claras si ordena las pérdidas en orden descendente a medida que el texto se coloca más cerca de las puntas de las flechas sin superponerse.

eche un vistazo a //sankeybuilder.com, ya que ofrece una solución lista para usar donde puede cargar sus datos y variaciones de reproducción a lo largo del tiempo. La transición funciona bien (similar a la demostración de youtube en su pregunta). Si carga la demostración de SankeyTrend, incluye muchos espacios de tiempo (Años de datos). Una vez cargado (construye los archivos de seguridad automáticamente), haga clic en el botón de reproducción en la esquina superior derecha de la página para reproducir los intervalos de tiempo, incluso puede pausar y reanudar el tiempo. Demo url está aquí: SankeyTrend Espero que esto ayude a tu búsqueda del diagtwig de Sankey perfecto.

Simplemente abre un paquete que utiliza un diagtwig aluvial para visualizar las etapas del flujo de trabajo. Como se conserva la historia cuando se usa la forma aluvial, no hay cruces en los bordes.

https://github.com/claytontstanley/shiny.alluvial

enter image description here