R中的Sankey图?

我正在尝试使用R中的Sankey Diagram可视化我的数据流。


我发现此博客文章链接到生成Sankey Diagram的R脚本,不幸的是,它是原始的并且有点受限制(请参见下面的示例代码和数据)。


有谁知道其他脚本,或者甚至是软件包,它们更发达?我的最终目标是通过图表组件的相对大小来可视化数据流和百分比,就像这些Sankey Diagrams示例一样。


我在r-help列表上发布了一个类似的问题,但是两周后没有任何回应,我在这里尝试了我的运气。


谢谢,埃里克


PS。我知道Parallel Sets Plot,但这不是我想要的。


# 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图, 用上面的代码生成的Sankey图


明月笑刀无情
浏览 579回答 3
3回答

翻阅古今

如果您想使用R进行操作,则最好的出价似乎是@Roman建议- 修改SankeyR函数。例如,下面是我的快速解决方法,只需将标签垂直放置,适当地偏移它们并减少输入引用的字体,以使其看起来更好。此修改仅更改SankeyR函数中的行171和223 :&nbsp; &nbsp; #line171 - change oversized font size of input label&nbsp; &nbsp; fontsize = max(0.5,frInputs[j]*1.5)#1.5 instead of 2.5&nbsp;&nbsp; &nbsp; #line223 - srt changes from 35 to 90 to orient labels vertically,&nbsp;&nbsp; &nbsp; #and offset adjusts them to get better alignment with arrows&nbsp; &nbsp; text(txtX, txtY, fullLabel, cex=fontsize, pos=4, srt=90, offset=0.1)在此处输入图片说明我不是三角学的王牌,但这确实是改变箭头方向所需要的。在我看来,这是理想的选择-如果您可以调整松动箭头,使它们水平而不是垂直。否则,为什么我的解决方案解决了标签方向问题,但并没有使图表更具可读性...
打开App,查看更多内容
随时随地看视频慕课网APP