2017-08-16 70 views
0

我有一個我在R中創建的Sankey圖。它生成圖,但節點名放置在右側節點的節點左側。我希望所有的名字都在右側,這樣真實姓名(更長)不會互相重疊。如何控制Sankey圖中的節點標籤

下面是一組完整的工作代碼,將生成我目前正在使用的圖表。

library(networkD3) 

nodes <- data.frame('name' = 
c('Node0','Node1','Node2','Node3','Node4','Node5','Node6',     
'Node7','Node8','Node9','Node10','Node11','Node12','Node13', 
'Node14','Node15','Node16','Node17','Node18','Node19', 
'Node20','Node21','Node22','Node23','Node24','Node25', 
'Node26','Node27','Node28','Node29','Node30','Node31', 
'Node32','Node33')) 

links = as.data.frame(matrix(c(
    0, 3,140, 
    0, 4,140, 
    0, 5,140, 
    0, 6,140, 
    1, 3,140, 
    1, 4,140, 
    1, 5,140, 
    1, 6,140, 
    2, 3,140, 
    2, 4,140, 
    2, 5,140, 
    2, 6,140, 
    3, 7,130, 
    3, 8,130, 
    3, 9,50, 
    3,10,50, 
    3,11,50, 
    4,12,140, 
    4,13,100, 
    4,14,100, 
    4,15,80, 
    5,16,150, 
    5,17,150, 
    5,18,60, 
    5,19,60, 
    6,20,180, 
    6,21,80, 
    6,22,80, 
    6,23,80, 
    7,24,13, 
    7,33,13, 
    7,31,104, 
    8,24,13, 
    8,33,13, 
    8,26,52, 
    8,27,52, 
    9,24,10, 
    9,33,10, 
    9,29,30, 
    9,30,30, 
    10,24,10, 
    10,33,10, 
    10,29,30, 
    10,30,30, 
    11,24,10, 
    11,33,10, 
    11,29,30, 
    11,30,30, 
    12,24,16, 
    12,33,16, 
    12,26,36, 
    12,27,36, 
    12,28,36, 
    13,24,10, 
    13,33,10, 
    13,26,30, 
    13,27,30, 
    13,28,30, 
    14,24,10, 
    14,33,10, 
    14,26,30, 
    14,27,30, 
    14,28,30, 
    15,24,10, 
    15,33,10, 
    15,31,60, 
    16,24,30, 
    16,33,30, 
    16,32,90, 
    17,24,30, 
    17,33,30, 
    17,32,90, 
    18,24,10, 
    18,33,10, 
    18,25,40, 
    19,24,30, 
    19,33,30, 
    20,24,90, 
    20,33,90, 
    21,33,80, 
    22,24,10, 
    22,33,10, 
    22,29,30, 
    22,30,30, 
    23,24,40, 
    23,33,40), 
byrow = TRUE, ncol = 3)) 

names(links) = c("source", "target", "value") 
sankeyNetwork(Links = links, Nodes = nodes, 
       Source = "source", Target = "target", 
       Value = "value", NodeID = "name", 
       fontSize= 15, nodeWidth = 20, 
       colourScale = JS("d3.scaleOrdinal(d3.schemeCategory20b);")) 

回答

1

您可以在創建sankey網絡圖後通過使用htmlwidgets包添加一些JavaScript來設置文本錨點。如果您希望文本位於右側節點的右側,您可能還需要調整左邊距。

library(htmlwidgets) 

sn <- sankeyNetwork(Links = links, Nodes = nodes, 
        Source = "source", Target = "target", 
        Value = "value", NodeID = "name", 
        fontSize= 15, nodeWidth = 20, margin = list(left = 100), 
        colourScale = JS("d3.scaleOrdinal(d3.schemeCategory20b);")) 

onRender(
    sn, 
    ' 
    function(el, x) { 
    d3.selectAll(".node text").attr("text-anchor", "begin").attr("x", 20); 
    } 
    ' 
) 
+0

非常感謝。我嘗試了你的答案,但我還沒有足夠的聲望。這正是我所期待的。 – VPMACH

相關問題