forceNetwork不显示任何边缘

时间:2015-05-24 18:10:26

标签: r d3.js networkd3

我试图找出forceNetwork()中节点和链接数据帧的确切要求,因为我的网络显示彩色可移动点,没有连接它们的任何边缘,我不知道为什么。据我所知,要求是:

节点数据框必须具有:

  • 与链接源名称完全匹配的nodeID列(如果节点与链接的顺序不同)。如果它们的顺序相同,则可以根据我对文档的阅读删除此参数。
  • 一个组变量,它指定节点的组。不同的组是不同的颜色来区分它们。

    链接数据框必须具有:

  • 源列(将与目标连接的节点列表)
  • 目标列
  • 一个值列,指定要在节点

    之间绘制的线的权重
    > head(links)
      source target value
    1  11170      7     1
    2   2840      2     1
    3  32595      2     1
    4  45410      8     1
    5  52720     12     1
    6  61720      6     1
    > head(nodes)
      nodeID group
    1  11170     2
    2   2840     1
    3  32595     2
    4  45410     3
    5  52720     1
    6  61720     2
    > head(E(g))
    Edge sequence:
    
    [1] 7     -- 11170
    [2] 2     -- 2840 
    [3] 2     -- 32595
    [4] 8     -- 45410
    [5] 12    -- 52720
    [6] 6     -- 61720
    > head(V(g))
    Vertex sequence:
    [1] "11170" "2840"  "32595" "45410" "52720" "61720"
    
    > typeof(nodes$nodeID[1])
    [1] "integer"
    > typeof(links$source[1])
    [1] "integer"
    
    > dim(links)
    [1] 121   3
    > dim(nodes)
    [1] 135   2
    
    > forceNetwork(Links = links, Nodes = nodes,Source = "source", Target = "target", NodeID = "nodeID",Group = "group", opacity = 0.8, colourScale = "d3.scale.category10()")
    
  • 1 个答案:

    答案 0 :(得分:0)

    source数据框中的target Links向量必须为数字,其值指的是{{}中节点的索引它们表示的数据帧(零索引,与R不同,因为它由JavaScript代码使用)。

    Nodes数据框的nodeID向量提供每个节点的名称(字符或数字),当您将鼠标悬停在生成的可视化中的节点上时,会显示该名称。

    根据您的示例数据,我怀疑您在Nodes中拥有的数据是节点的ID,而links$source中的数据则是其他数据。虽然它们都是数字向量,但这些值并不代表它们在links$target数据框中引用的节点的索引。

    如果您的Nodeslinks$source向量中有节点名称/ ID而不是links$target数据框中节点的索引,则可以像这样修复它...

    Nodes