2017-08-16 5 views
0

Ich habe ein Sankey-Diagramm, das ich in R erstelle. Es erzeugt das Diagramm, aber die Knotennamen werden auf der linken Seite der Knoten für die Knoten auf der rechten Seite platziert. Ich möchte alle Namen auf der rechten Seite haben, damit die echten Namen (die länger sind) sich nicht überschneiden.So steuern Sie Knotenbeschriftungen im Sankey-Diagramm

Unten ist ein vollständiger Satz von Arbeitscode, der das Diagramm erzeugen wird, mit dem ich gerade arbeite.

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

Antwort

1

Sie können den Textanker nach dem Erstellen des Sankey-Netzwerkdiagramms festlegen, indem Sie JavaScript mit dem htmlwidgets-Paket hinzufügen. Sie können auch den linken Rand anpassen, wenn der Text auf der rechten Seite der rechten Seitenknoten sein soll.

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

Vielen Dank. Ich habe versucht, deine Antwort zu verbessern, aber ich habe noch nicht genug Ansehen. Das hat genau das gemacht, wonach ich gesucht habe. – VPMACH

Verwandte Themen