Pregunta Diagramas Sankey en R?


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

encontré esta publicación en el blog vincular a un script R que produce un Diagrama de Sankey, desafortunadamente es bastante crudo y algo limitado (ver abajo 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 objetivo final es visualizar tanto el flujo de datos como los porcentajes por tamaño relativo de los componentes del diagrama, como en estos ejemplos de diagramas de Sankey.

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

Gracias, Eric

PD. Soy consciente de Parallel Sets Parcela, 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 produced with the code above


75
2018-04-01 21:17


origen


Respuestas:


Esta trama se puede crear a través de networkD3 paquete. Le permite crear diagramas 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


52
2018-03-18 14:13



Si quieres hacerlo con R, tu mejor oferta parece ser la sugerencia de @Roman: piratear el SankeyR función. Por ejemplo, a continuación, mi solución más rápida es: simplemente oriente las etiquetas 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 el SankeyR función:

    #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 etiquetas, no hace que el diagrama sea mucho más legible ...


36
2018-04-04 13:54



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


36
2018-03-03 13:35



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


20
2017-11-04 00:40



R's  paquete también hará esto (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


12
2018-04-25 12:30



trama tiene el mismo poder que networkD3 paquete (enlace de ejemplo)

enter image description here


8
2017-07-28 03:15



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

Ya que Los diagramas de Sankey son gráficos ponderados dirigidos, un paquete como qgraph podría ser útil.

los SankeyR La función proporciona etiquetas 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 solaparse.


6
2018-04-03 23:16



Mira esto //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. La url Demo está aquí: SankeyTrend Espero que esto ayude a tu búsqueda del diagrama de Sankey perfecto.


5
2018-03-21 12:26



Simplemente abre un paquete que utiliza un diagrama 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


1
2017-10-03 21:46