【问题标题】:Setting networkD3 Node Size with vector of weights使用权重向量设置 networkD3 节点大小
【发布时间】:2018-04-12 01:07:03
【问题描述】:

我正在尝试在 R 中使用 data.treeNetworkD3 创建文件系统的树表示,其中图形的节点按文件大小加权。

library(data.tree)
library(networkD3)

repo <- Node$new("Repository")
git <- repo$AddChild(".git")
prod <- repo$AddChild("Production")
exp <- repo$AddChild("Experimental")

repo$size <- 866000
git$size <- 661000
prod$size <- 153000
exp$size <- 48000

我可以使用 Get 获得这些大小的向量,这样

sizes <- repo$Get("size")

但是当我尝试将它们放在一起时,我不确定如何在网络可视化步骤中包含此权重信息。尝试做这样的事情......

reponet <- ToDataFrameNetwork(repo,"repo")
net <- forceNetwork(reponet, Nodesize = repo$Get("size"))

无济于事。基本上我正在尝试做 Julia Silge 在这个伟大的SO blog post 中所做的事情。有人知道怎么设置吗?

【问题讨论】:

    标签: r tree data-visualization networkd3


    【解决方案1】:

    查看forceNetwork 的帮助文件...有许多您尚未设置的强制性参数。

    您可以使用simpleNetwork 像您一样仅使用链接数据框绘制网络,但它不允许您控制节点大小...例如...

    simpleNetwork(reponet)
    

    要控制节点大小,需要使用forceNetwork,但它需要一个链接数据框和一个节点数据框。您可以从您创建的 sizes 对象构建节点数据框,然后调整链接数据框中的源和目标 ID 以匹配节点数据框中相应节点的索引(0 索引,因为它已发送到 JavaScript )...例如...

    nodesdf <- data.frame(name = names(sizes), nodesize = sizes / 10000, group = 1)
    
    reponet$from <- match(reponet$from, nodesdf$name) - 1
    reponet$to <- match(reponet$to, nodesdf$name) - 1
    
    forceNetwork(reponet, Nodes = nodesdf, Source = "from", Target = "to", 
                 NodeID = "name", Group = "group", Nodesize = "nodesize")
    

    【讨论】:

    • 感谢您的深入解释。这立即奏效了。很高兴看到更多的定制方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2017-05-10
    • 2015-10-12
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多