2016-08-02 26 views
1

Sankeyネットワークを作成するためにRにnetworkD3ライブラリを使用しています。これは私にとってはうまくいきましたが、属性「NoteID」および/または「NoteGroup」をグループ化し、色を割り当てるための問題が発生しました。SankeyダイアグラムでRライブラリnetworkD3に色が表示されない

次のコードは、図、唯一「Sankey4は」設計し、すなわち、無色として動作します。

library(networkD3) 
#Unique list of nodes 
my_nodes = structure(list(name = c("HawaiTEST", "AMSVOASMPP01", "App1", 
            "Transfer", "Transferred_tel__63null_", 
            "Transferred_tel__631100107_", 
            "AMSVOASMPP02", 
            "Transferred_tel__631100108_", 
            "Transferred_tel__631100106_", 
            "Transferred_tel__631100104_", 
            "Transferred_tel__631100105_", 
            "FarEndDisconnect", 
            "FarEndDisconnect_Hangup", "DutchAOS", 
            "SwedenAOS", 
            "Transferred_tel__63000_")), class = 
c("tbl_df", "tbl", "data.frame" 
), row.names = c(NA, -16L), .Names = "name") 

# Network 
my_links = structure(list(key = c("0_1", "0_6", "1_13", "1_14", "1_2", "11_12", 
            "13_11", "13_3", "14_11", "14_3", "2_11", 
            "2_3", "3_10", "3_15", 
            "3_4", "3_5", "3_7", "3_8", "3_9", "6_13", 
            "6_2"), source = c(0L, 
            0L, 1L, 1L, 1L, 11L, 13L, 13L, 14L, 14L, 2L, 
            2L, 3L, 3L, 3L, 
            3L, 3L, 3L, 3L, 6L, 6L), target = c(1L, 6L, 
            13L, 14L, 2L, 12L, 
            11L, 3L, 11L, 3L, 11L, 3L, 10L, 15L, 4L, 5L, 
            7L, 8L, 9L, 13L, 
            2L), total = c(38L, 36L, 4L, 3L, 31L, 6L, 2L, 
            5L, 1L, 2L, 3L, 
            61L, 11L, 1L, 12L, 11L, 11L, 11L, 11L, 3L, 
            33L)), class = c("tbl_df", 
          "tbl", "data.frame"), row.names = c(NA, -21L), .Names 
= c("key", 
    "source", "target", "total")) 


# NOT WORKING using "NodeID", or "NodeGroup" 
sankey1 = sankeyNetwork(Links =my_links, Nodes = my_nodes, Source = 
          "source", Target = "target", Value = "total", units = 
          "calls", NodeID = "name") 

sankey2 = sankeyNetwork(Links =my_links, Nodes = my_nodes, Source = 
          "source", Target = "target", Value = "total", units = 
          "calls", NodeGroup = "name") 
sankey2 

# NOT WORKING using ColourScale (diagram is displayed, grey scale though) 
ColourScale <- 'd3.scale.ordinal() 
      .domain(["lions", "tigers"]) 
      .range(["#FF6900", "#694489"]);' 
sankey3 = sankeyNetwork(Links =my_links, Nodes = my_nodes, Source = 
          "source", Target = "target", Value = "total", units = 
          "calls", colourScale = JS(ColourScale)) 
sankey3 

# WORKING! 

sankey4 = sankeyNetwork(Links =my_links, Nodes = my_nodes, Source = 
          "source", Target = "target", Value = "total", units = 
          "calls") 
sankey4 

「Sankey1は」やって、しかし、「たNoteID」それは上記参照ウェブからの例で使用されている方法を使用しようとしている結果で図は全く表示されない。 "Sankey2"と同じ効果です。カラースキームの定義に関係なく、「Sankey4」は灰色で表示されます。

私は、両方とも、私のRコード "Sankey1"とhttps://christophergandrud.github.io/networkD3/#sankeyで使用されるコードを生成するhtmlコードを見てきました。 "Sankey1" から

HTML::ウェブ例から

"group":{"name":["HawaiTEST", ... 
... 
"options":{"NodeID":1,"NodeGroup":"name","LinkGroup":null, 

HTMLの抜粋:

"group":["Agricultural 'waste'","Bio-conversion", ... 
... 
"options":{"NodeID":"name","NodeGroup":"name","LinkGroup":null 

"Sankey1" のために、出力HTMLを変更で明らかに、グループに関する違いがありますWebサンプルからの出力を反映させるために問題が解決され、デフォルトのカラースキーマを使用して「Sankey1」が表示されます。

私は使用しているデータの動作を理解しようとしている現在、壁にぶつかっています。 sankey関数は、必須のリスト入力に依存しません。私は実際には、ウェブサイトからのサンプルデータセットを2つのデータフレーム(ノード、リンク)に分割していますが、これはウェブの例のように同じサンドキー図を色で生成します。したがって、私の例では何か入力データに間違っているはずです...私は推測します...どんな助けも高く評価されるでしょう! おかげでおそらく オリ

答えて

0

私は同様の問題がありました。私はノードの全体数を減らすことで解決しました(特定の値を超えるエッジのみをフィルタリングすることによって)。

4

は、私はsankey1は、その名前によって予想されるように色のノードと私のために、以下を生成し、誤解が、CRANやGithubのバージョンのいずれかを使用しています。

sankey diagram 1 with colors

我々はNodeGroupを使用したい場合は、我々はこのような何かを行うことができます。

sankey with grouped colors

# make up a group based on the first two characters 
# of node name 
my_nodes$group <- substr(my_nodes$name,1,2) 
# now use our new group for group colors 
sankeyNetwork(
    Links =my_links, Nodes = my_nodes, Source = "source", 
    Target = "target", Value = "total", NodeID = "name", 
    units = "calls", 
    NodeGroup = "group" 
) 

我々はカスタムカラースケールを供給したい場合は、我々はこれを行うことができます。

sankeyNetwork(
    Links =my_links, Nodes = my_nodes, Source = "source", 
    Target = "target", Value = "total", NodeID = "name", 
    units = "calls", 
    NodeGroup = "group", 
    colourScale = "d3.scale.category10()" 
) 

sankey with custom color scale

色のカスタム割り当てのために、私たちは前の例を拡張でき、d3.scale.category*機能のオフハック。

sankeyNetwork(
    Links =my_links, Nodes = my_nodes, Source = "source", 
    Target = "target", Value = "total", NodeID = "name", 
    units = "calls", 
    NodeGroup = "group", 
    colourScale = sprintf(
    "d3.scale.category10().range(%s).domain(%s)", 
    jsonlite::toJSON(substr(topo.colors(length(unique(my_nodes$group))),1,7)), 
    jsonlite::toJSON(unique(my_nodes$group)) 
) 
) 

sankey with custom group colors

+0

ありがとうございました!私の最終的な問題は明らかに私のインターネット接続のキャッシング設定に起因していました。ポスティングでSankey4というSankeyダイアグラムを作成した後、ブラウザは変更されたバージョン(Sankey1/2/3)、バグを一切取得しませんでした。はい、すべてが今働いています。あなたの成功報告のおかげで、私は別のコンピュータで試してみました。もう一度、この問題を見ることに本当に感謝します。 – Oliver

+0

私は何か興味深いものを見つけました。明らかに、私の問題はキャッシングの設定に起因するだけではありませんでした。 – Oliver

+0

私は何か興味深いものを見つけました。明らかに、私の問題はキャッシングの設定に起因するだけではありませんでした。 答えはすべて記述どおりに機能します。しかし、networkD3関数を呼び出してネットワークを作成する前にライブラリ "dplyr"や "tidyr"をロードすると、上記のように "sankey1"というダイアグラムが間違ったHTMLコードを生成します( "group":{"name ":[" HawaiTEST "、...")、最後に空の図が表示されます。 – Oliver

関連する問題