Estou tentando visualizar meu fluxo de dados com um Diagrama de Sankey em R.
Eu encontrei esta postagem do blog com um link para um script R que produz um Diagrama de Sankey, infelizmente é bastante bruto e um tanto limitado (veja abaixo para exemplos de código e dados).
Alguém conhece outros scripts - ou talvez até mesmo um pacote - que seja mais desenvolvido? Meu objetivo final é visualizar o fluxo de dados e as porcentagens por tamanho relativo dos componentes do diagrama, como nesses exemplos de Diagramas de Sankey .
Eu postei uma pergunta um tanto semelhante na lista r-help , mas depois de duas semanas sem nenhuma resposta, estou tentando a sorte aqui no stackoverflow.
Obrigada Eric
PS. Estou ciente do gráfico de conjuntos paralelos , mas não é isso que estou procurando.
# 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")
Diagrama de Sankey produzido com o código acima,
fonte
Respostas:
Este gráfico pode ser criado por meio do
networkD3
pacote. Ele permite que você crie diagramas sankey interativos. Aqui você pode encontrar um exemplo . Também adicionei uma captura de tela para que você tenha uma ideia de como é.fonte
htmlwidgets
é o enredo sankey donetworkD3
pacote. Eu atualizei a postagem.Eu criei um pacote ( riverplot ) que tem uma funcionalidade ligeiramente diferente, mas sobreposta em comparação com a função Sankey, e pode produzir gráficos como este:
fonte
Se você quiser fazer isso com R, seu melhor lance parece ser a sugestão @Roman - hackear a função SankeyR . Por exemplo - abaixo está minha solução muito rápida - simplesmente oriente os rótulos verticalmente, desloque-os ligeiramente e diminua a fonte para referências de entrada para torná-los um pouco melhor. Esta modificação altera apenas a linha 171 e 223 na função SankeyR :
Não sou um craque em trigonometria, mas isso é realmente o que você precisa para mudar a direção das setas. Isso seria ideal na minha opinião - se você pudesse ajustar as setas soltas para que sejam orientadas horizontalmente em vez de verticalmente. Caso contrário, por que minha solução corrige o problema com a orientação dos rótulos, não torna o diagrama muito mais legível ...
fonte
Além de rCharts , os diagramas de Sankey agora também podem ser gerados em R com googleVis (versão> = 0.5.0). Por exemplo, esta postagem descreve a geração do seguinte diagrama usando googleVis:
fonte
R's aluvialpacote também fará isso (de
?alluvial
).fonte
plotly tem o mesmo poder do
networkD3
pacote ( link de exemplo ).fonte
Julgando por essas definições essa função, como o gráfico de conjuntos paralelos, não tem a capacidade de dividir e combinar fluxos (ou seja, por meio de mais de uma transição).
Visto que os diagramas Sankey são gráficos ponderados direcionados , um pacote como o qgraph pode ser útil.
A
SankeyR
função fornece rótulos mais claros se você classificar as perdas em ordem decrescente à medida que o texto é colocado próximo às pontas das setas sem se sobrepor.fonte
dê uma olhada em //sankeybuilder.com, pois ele oferece uma solução pronta para usar, onde você pode carregar seus dados e reproduzir variações ao longo do tempo. A transição funciona bem (semelhante à demonstração do youtube em sua pergunta). Se você carregar a demonstração SankeyTrend, ela incluirá muitos intervalos de tempo (anos de dados). Uma vez carregado (cria sankeys automaticamente), clique no botão play no canto superior direito da página para reproduzir os slots de tempo, você pode até pausar e retomar o tempo. O URL de demonstração está aqui: SankeyTrend Espero que isso ajude sua busca pelo diagrama de Sankey perfeito.
fonte
Para ser completo, há também o
ggalluvial
pacote que é umggplot2 extension
para diagramas aluviais / Sankey.Aqui está um exemplo retirado da documentação do pacote
Criado em 13/11/2018 pelo pacote reprex (v0.2.1.9000)
fonte
Acabei de abrir um pacote que usa um diagrama aluvial para visualizar as etapas do fluxo de trabalho. Uma vez que a história é mantida quando a forma aluvial é usada, não há nenhum cruzamento nas bordas.
https://github.com/claytontstanley/shiny.alluvial
fonte