删除 sankey 网络中的 "unused"节点

标签 r sankey-diagram networkd3

我正在尝试建立一个桑基网络。 这是我的数据和代码:

library(networkD3)
nodes <- data.frame(c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "D", "E", "N", "O", "P", "Q", "R"))
names(nodes) <- "name"
nodes$name = as.character(nodes$name)
links <- data.frame(matrix( 
  c(0,  2,  318.167, 
0,  3,  73.85, 
0,  4,  51.1262,
0,  5,  6.83333,
0,  6,  5.68571,
0,  7,  27.4167,
0,  8,  4.16667,
0,  9,  27.7381,
1,  10, 627.015,
1,  3,  884.428,
1,  4,  364.211,
1,  13, 12.33333,
1,  14, 9,
1,  15, 37.2833,
1,  16, 9.6,
1,  17, 30.5485), nrow=16, ncol=3, byrow = TRUE))
colnames(links) <- c("source", "target", "value")
links$source = as.integer(links$source)
links$target = as.integer(links$target)
links$value = as.numeric(links$value)
sankeyNetwork(Links = links, Nodes = nodes, Source = "source",
          Target = "target", Value = "value", NodeID = "name",
          fontSize = 12, fontFamily = 'Arial', nodeWidth = 20)

问题是 A 和 B 只有到 D 和 E 的公共(public)链接。 虽然链接显示正确,但 D 和 E 也显示在右下角。 我怎样才能避免这种情况? 注意:如果我指定

nodes <- data.frame(c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "N", "O", "P", "Q", "R"))

根本没有创建网络。

enter image description here

最佳答案

节点必须是唯一的,见下面的例子。我删除了重复的节点:“D”和“E”,然后在链接中,我删除了引用不存在的节点的链接。我们只有 16 个节点,从零开始 0:15。在您的链接 dataframe 中,您有最后 2 行引用 16 和 17。


或作为 @CJYetman (networkD3 author)评论:

Another way to say it... every node that is in the nodes data frame will be plotted, even if it has the same name as another node, because the index is technically the unique id.

library(networkD3)

nodes <- data.frame(name = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "N", "O", "P", "Q", "R"), 
                    ix = 0:15)

links <- data.frame(matrix( 
  c(0,  2,  318.167, 
    0,  3,  73.85, 
    0,  4,  51.1262,
    0,  5,  6.83333,
    0,  6,  5.68571,
    0,  7,  27.4167,
    0,  8,  4.16667,
    0,  9,  27.7381,
    1,  10, 627.015,
    1,  3,  884.428,
    1,  4,  364.211,
    1,  13, 12.33333,
    1,  14, 9,
    1,  15, 37.2833), nrow=14, ncol=3, byrow = TRUE))
colnames(links) <- c("source", "target", "value")

sankeyNetwork(Links = links, Nodes = nodes, Source = "source",
              Target = "target", Value = "value", NodeID = "name",
              fontSize = 12, fontFamily = 'Arial', nodeWidth = 20)

enter image description here

关于删除 sankey 网络中的 "unused"节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51503328/

相关文章:

r - 如何在 Sankey 图表 networkD3 中添加列标题

javascript - R网络D3包: forceNetwork() coloring

在plot_ly中重新定义动画 slider 的标签

r - 相当于SAS企业矿工评分节点的R是多少?

r - 将元素名称粘贴到每个列表元素的列中

r - 尝试合并两个具有特定条件的数据帧和 R 中行的间隙

r - R 中带有百分比和部分填充的桑基/冲积图

javascript - 增加 d3 SVG 容器大小

r - 单击 R 中的 Sankey Chart 线时添加额外的标签值

r - Sankey Network(R blogdown 内)无法在 Firefox 上正确呈现