Pertanyaan Sankey Diagram di R?


Saya mencoba memvisualisasikan aliran data saya dengan Diagram Sankey di R.

saya menemukan posting blog ini menghubungkan ke skrip R yang menghasilkan Diagram Sankey, sayangnya itu cukup mentah dan agak terbatas (lihat di bawah untuk contoh kode dan data).

Adakah yang tahu skrip lain — atau mungkin bahkan paket — yang lebih dikembangkan? Tujuan akhir saya adalah memvisualisasikan kedua aliran data dan persentase oleh ukuran relatif dari komponen diagram, seperti di contoh-contoh ini dari Diagram Sankey.

Saya memposting pertanyaan yang agak mirip di daftar r-help, tetapi setelah dua minggu tanpa respon, saya mencoba keberuntungan saya di sini di stackoverflow.

Terima kasih, Eric

PS. Saya sadar akan hal itu Parallel Sets Plot, tapi bukan itu yang saya cari.

# 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")

Diagram Sankey diproduksi dengan kode di atas, Sankey Diagram produced with the code above


75
2018-04-01 21:17


asal


Jawaban:


Plot ini dapat dibuat melalui networkD3 paket. Ini memungkinkan Anda membuat diagram sankey interaktif. Di sini Anda dapat menemukan contoh. Saya juga menambahkan tangkapan layar sehingga Anda memiliki gambaran seperti apa tampilannya.

enter image description here


52
2018-03-18 14:13



Jika Anda ingin melakukannya dengan R, tawaran terbaik Anda tampaknya adalah @Roman suggestion - hack the SankeyR fungsi. Sebagai contoh - di bawah ini saya sangat cepat memperbaiki - cukup orientasi label vertikal, slighlty mengimbangi mereka dan mengurangi font untuk input referensi agar terlihat sedikit lebih baik. Modifikasi ini hanya mengubah baris 171 dan 223 di SankeyR fungsi:

    #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

Saya bukan ace dalam trigonometri, tetapi ini benar-benar apa yang Anda butuhkan untuk mengubah arah panah. Itu akan ideal dalam pandangan saya - jika Anda bisa menyesuaikan panah loosing sehingga mereka berorientasi horizontal ketimbang vertikal. Jika tidak, mengapa solusi saya memperbaiki masalah dengan orientasi label, itu tidak membuat diagram lebih mudah dibaca ...


36
2018-04-04 13:54



Saya telah membuat paket (dataran sungai) yang memiliki fungsi yang sedikit berbeda, tetapi tumpang tindih dibandingkan dengan fungsi Sankey, dan dapat menghasilkan plot seperti ini:

enter image description here


36
2018-03-03 13:35



Sebagai tambahannya rCharts, Sankey diagram sekarang dapat juga dihasilkan dalam R dengan googleVis (versi> = 0,5.0). Misalnya, ini pos menggambarkan pembuatan diagram berikut menggunakan googleVis: enter image description here


20
2017-11-04 00:40



R's  paket juga akan melakukan ini (dari ?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



petak memiliki kekuatan yang sama networkD3 paket (tautan contoh).

enter image description here


8
2017-07-28 03:15



Dilihat oleh definisi ini fungsi ini, seperti Parallel Sets Plot, tidak memiliki kapasitas untuk membagi dan menggabungkan arus (yaitu melalui lebih dari satu transisi).

Sejak Diagram Sankey adalah graf berbobot tertimbang, paket seperti qgraph semoga bermanfaat.

Itu SankeyR fungsi memberikan label yang lebih jelas jika Anda mengurutkan kerugian dalam urutan menurun karena teks ditempatkan lebih dekat ke kepala panah tanpa tumpang tindih.


6
2018-04-03 23:16



lihatlah //sankeybuilder.com karena menawarkan solusi siap pakai di mana Anda dapat mengunggah data dan variasi pemutaran dari waktu ke waktu. Transisi berfungsi dengan baik (mirip dengan demo youtube dalam pertanyaan Anda). Jika Anda memuat demo SankeyTrend itu mencakup banyak slot waktu (Tahun data). Setelah dimuat (membangun sankeys secara otomatis), klik tombol putar di sudut kanan atas halaman untuk memutar slot waktu, Anda bahkan dapat menjeda dan melanjutkan waktu. Demo url ada di sini: SankeyTrend Semoga ini membantu pencarian Anda untuk diagram Sankey yang sempurna.


5
2018-03-21 12:26



Hanya buka bersumber paket yang menggunakan diagram aluvial untuk memvisualisasikan tahapan alur kerja. Karena sejarah disimpan ketika bentuk aluvial digunakan, tidak ada crossover di tepinya.

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

enter image description here


1
2017-10-03 21:46