我使用下面的 R 代码生成桑基图。问题是节点没有按预期排列。例如,两个 M3 节点与 M24 节点组对齐,而不是与其他 M3 节点分组在一起。我将不胜感激任何有关如何控制 R 中节点的水平位置的建议。 谢谢。
library(networkD3)
# Define nodes and links data frames
nodes <- data.frame(
'name' = c("BL", "M3", "M3", "M3", "M3", "M12", "M12", "M12", "M12", "M18", "M18", "M18", "M18", "M24", "M24", "M24", "M24"),
'group' = as.factor(c("g","dgr","lgr","g","r","dgr","lgr","g","r","dgr","lgr","g","r","dgr","lgr","g","r"))
)
links <- data.frame(
'source' = c(0, 0, 0, 0, 3, 3, 3, 3, 4, 4, 4, 4, 7, 7, 7, 7, 8, 8, 8, 8, 11, 11, 11, 12, 12, 12, 12),
'target' = c(1, 2, 3, 4, 5, 6, 7, 8, 5, 6, 7, 8, 9, 10, 11, 12, 9, 10, 11, 12, 13, 15, 16, 13, 14, 15, 16),
'value' = c(70, 80, 1504, 843, 14, 13, 695, 317, 12, 44, 87, 271, 5, 10, 360, 183, 6, 12, 69, 219, 7, 186, 108, 2, 5, 46, 138),
'group' = as.factor(c("dgr_","lgr_","g_","r_","dgr_","lgr_","g_","r_","dgr_","lgr_","g_","r_","dgr_","lgr_","g_","r_","dgr_","lgr_","g_","r_","dgr_","g_","r_","dgr_","lgr_","g_","r_"))
)
# Define color scale
my_color <- 'd3.scaleOrdinal().domain(["g","dgr","lgr","r","g_","dgr_","lgr_","r_"]) .range(["green", "darkgrey", "lightgrey","red", "green", "darkgrey", "lightgrey","red"])'
# Plot Sankey diagram
sankey_R = sankeyNetwork(
Links = links, Nodes = nodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
fontSize = 12, nodeWidth = 20,
colourScale = my_color,
NodeGroup = "group", LinkGroup = "group"
)
sankey_R
我尝试使用plot_ly()代替sankeyNetwork(),但结果是相同的
我找到了解决办法。如果我使用plot_ly生成Sankey,并输出为.html,那么我可以拖动节点并根据需要重新排列它们。