2015-03-31 55 views
3

如何更改R googleVis sankey圖表中的節點和鏈接顏色?和鏈接具有相同的顏色作爲其始發節點?如何更改R中的節點和鏈接顏色googleVis sankey圖表

library(googleVis) 
datSK <- data.frame(From=c(rep("A",3), rep("B", 3)), 
       To=c(rep(c("X", "Y", "Z"),2)), 
       Weight=c(5,7,6,2,9,4)) 

Sankey <- gvisSankey(datSK, from="From", to="To", weight="Weight", 
       options=list(
        sankey="{link: {color: { fill: '#d799ae' } }, 
         node: { color: { fill: '#a61d4c' }, 
         label: { color: '#871b47' } }}")) 
plot(Sankey) 

回答

6

只要您必須從2個始發節點着色鏈接,您需要2種顏色的鏈接。 另外你總共有5個節點,所以你需要5種顏色。

允許創建2個陣列JSON格式顏色爲節點和鏈接

colors_link <- c('green', 'blue') 
colors_link_array <- paste0("[", paste0("'", colors_link,"'", collapse = ','), "]") 

colors_node <- c('yellow', 'lightblue', 'red', 'black', 'brown') 
colors_node_array <- paste0("[", paste0("'", colors_node,"'", collapse = ','), "]") 

接着,插入該陣列分成選項:

opts <- paste0("{ 
     link: { colorMode: 'source', 
       colors: ", colors_link_array ," }, 
     node: { colors: ", colors_node_array ," } 
     }") 

並且,最後繪製圖表:

plot(gvisSankey(datSK, from="From", to="To", weight="Weight", 
        options=list(
         sankey=opts))) 

enter image description here

請注意,在選項中,colorMode被設置爲'source',這意味着您想對來自始發節點的鏈接進行着色。另外,「目標」設置爲顏色鏈接,destinated節點

編輯:添加說明對多sankeys

這是一個有點棘手找到如何分配顏色多sankeys。

我們需要建立其他dateframe:

datSK <- data.frame(From=c(rep("A",3), rep("B", 3), rep(c("X", "Y", "Z"), 2)), 
       To=c(rep(c("X", "Y", "Z"),2), rep("M", 3), rep("N", 3)), 
       Weight=c(5,7,6,2,9,4,3,4,5,6, 4,8)) 

這裏我們要改變的顏色只有陣列。命令內置的情節是一樣的 假設我們希望這些色彩爲節點和鏈接:

colors_link <- c('green', 'blue', 'yellow', 'brown', 'red') 
colors_link_array <- paste0("[", paste0("'", colors_link,"'", collapse = ','), "]") 

colors_node <- c('yellow', 'lightblue', 'red', 'black', 'brown', 'green', 'brown') 
colors_node_array <- paste0("[", paste0("'", colors_node,"'", collapse = ','), "]") 

結果將是:

enter image description here

最棘手的部分是要了解這些是如何顏色被指定爲:

  1. 按照它們在數據集中出現的順序分配鏈接(row_wise)

enter image description here

  • 對於顏色分配在順序的情節是建立在節點。

    • 從A到X,Y,Z - 綠色
    • 從X到M,N - 藍色
    • 從Y到M,N - 黃色
    • 從Z到M,N - 棕色
    • 從B到X,Y,Z - 紅
  • 關於如何熱平衡圖格式的更多的詳細信息:https://developers.google.com/chart/interactive/docs/gallery/sankey

    +0

    你能擴展你的答案爲[多級Sankeys(https://developers.google.com/chart/interactive/docs/gallery/sankey#multilevel-sankeys)? – zx8754 2016-04-18 12:53:26

    +0

    是否有可能從一個節點出現兩種不同的顏色?換句話說,可以在不使用「source」或「target」作爲colorMode的情況下設置顏色嗎?請參閱:https://stackoverflow.com/questions/45291340/how-to-color-two-links-coming-out-of-the-same-node-or-going-to-the-same-node-w – 2017-07-27 16:22:45