90

R のサンキー ダイアグラムを使用してデータ フローを視覚化しようとしています。

サンキー ダイアグラムを生成する R スクリプトにリンクしているこのブログ投稿を見つけました。残念ながら、これは非常に未加工で、ある程度制限されています (サンプル コードとデータについては、以下を参照してください)。

より開発された他のスクリプト、またはパッケージを知っている人はいますか? 私の最終的な目標は、これらのサンキー ダイアグラムの例のように、ダイアグラム コンポーネントの相対的なサイズによってデータ フローとパーセンテージの両方を視覚化することです。

r-help list に似たような質問を投稿しましたが、2 週間応答がなかったので、stackoverflow で運試しをしています。

ありがとう、エリック

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

上記のコードで生成されたサンキー ダイアグラム、上記のコードで生成されたサンキー ダイアグラム

4

10 に答える 10

66

networkD3このプロットは、パッケージを通じて作成できます。インタラクティブなサンキー ダイアグラムを作成できます。ここにがあります。スクリーンショットも追加したので、どのように見えるかがわかります。

# Load package
library(networkD3)

# Load energy projection data
# Load energy projection data
URL <- paste0(
        "https://cdn.rawgit.com/christophergandrud/networkD3/",
        "master/JSONdata/energy.json")
Energy <- jsonlite::fromJSON(URL)
# Plot
sankeyNetwork(Links = Energy$links, Nodes = Energy$nodes, Source = "source",
             Target = "target", Value = "value", NodeID = "name",
             units = "TWh", fontSize = 12, nodeWidth = 30)

ここに画像の説明を入力

于 2014-03-18T14:13:12.397 に答える
45

Sankey 関数と比較して、わずかに異なるが重複する機能を持つパッケージ ( riverplot ) を作成し、次のようなプロットを生成できます。

ここに画像の説明を入力

于 2014-03-03T13:35:13.217 に答える
39

Rでそれをやりたいのなら、あなたの最善の入札は@Romanの提案のようです - SankeyR機能をハックしてください。たとえば、以下は私の非常に簡単な修正です。ラベルを垂直方向に向け、それらをわずかにオフセットし、入力参照のフォントを減らして、見栄えを良くします。この変更は、SankeyR関数の 171 行目と 223 行目のみを変更します。

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

ここに画像の説明を入力

私は三角法のエースではありませんが、これは実際に矢印の方向を変えるために必要なものです。私の見解では、それは理想的です-ルーズ矢印を調整して、垂直ではなく水平に向けることができれば。それ以外の場合、なぜ私の解決策がラベルの向きの問題を修正するのか、図が読みやすくならない...

于 2012-04-04T13:54:20.163 に答える
25

rChartsに加えて、サンキーダイアグラムもgoogleVis (バージョン >= 0.5.0)を使用して R で生成できるようになりました。たとえば、この投稿では、googleVis を使用した次の図の生成について説明しています。 ここに画像の説明を入力

于 2014-11-04T00:40:37.923 に答える
6

これらの定義から判断すると、この関数は、Parallel Sets Plot と同様に、フローを分割および結合する (つまり、複数の遷移による) 能力を欠いています。

サンキー ダイアグラムは有向加重グラフであるため、 qgraphなどのパッケージが役立つ場合があります。

SankeyR損失を降順で並べ替えると、テキストが重複せずに矢印の頭の近くに配置されるため、関数はより明確なラベルを提供します。

于 2012-04-03T23:16:34.603 に答える
5

//sankeybuilder.comをご覧ください。データをアップロードして、時間の経過とともにバリエーションを再生できる、すぐに使用できるソリューションを提供しています。トランジションはうまく機能します(質問のYouTubeデモに似ています)。SankeyTrend デモを読み込むと、多数のタイム スロット (データの年数) が含まれます。読み込まれると (sankeys が自動的に作成されます)、ページの右上隅にある再生ボタンをクリックしてタイムスロットを再生します。時間の一時停止と再開もできます。デモの URL は次のとおりです: SankeyTrendこれが、完璧なサンキー ダイアグラムの探求に役立つことを願っています。

于 2016-03-21T12:26:28.240 に答える