力导向网络图
这种图采用物理上的弹簧模型,将节点之间想象成是用弹簧连接的,然后把这些用弹簧连接的节点扔到桌面上,让这些弹簧自己弹啊弹,弹啊弹,最后总能停下来,达到一个平衡状态。这个状态下的节点连接图,能力最小,线和线之间的交叉最小。这种方法的学名叫spring-embedder 或者 force-directed。
拖动中间的图里的任意节点,整个网络就会被拖动,并达到新的平衡位置。
从图里,我们可以大致看出不同的群体,群体里的人关系紧密,而不同群体之间的关系比较松散。群体分析也是网络数据可视化的一个主要目的。
library(networkD3)
data(MisLinks, MisNodes)
(1)MisNodes数据集
MisNodes是77个人,编号是0~76,这些人分成10组,组编号是1~10> summary(MisNodes)
name group
Anzelma : 1 Min. : 0.000
Babet : 1 1st Qu.: 2.000
Bahorel : 1 Median : 4.000
Bamatabois : 1 Mean : 4.091
BaronessT : 1 3rd Qu.: 5.000
Blacheville: 1 Max. :10.000
(Other) :71
> dim(MisNodes)
[1] 77 2
注意:group这个属性要用活,比如说表示财富群组、年龄群组等。
(2)MisLinks数据集
MisLinks表示这77个人254次联系,source表示主动联系的人,target表示被动联系的人,value表示每次联系的权值。
> dim(MisLinks)
[1] 254 3
1 1 0 1
2 2 0 8
3 3 0 10
4 3 2 6
5 4 0 1
注意:source和target都是MisNodes中的序号。
(3)绘制力导向网络图forceNetwork
节点表示接触的双方,连线的粗细表示接触的权值。
forceNetwork(Links = MisLinks, Nodes = MisNodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
Group = "group", opacity = 0.4)
新的版本,函数格式有了新的变化,可以增加Legend等:
forceNetwork(Links, Nodes, Source, Target, Value, NodeID, Nodesize, Group,
height = NULL, width = NULL, colourScale = JS("d3.scale.category20()"),
fontSize = 7, linkDistance = 50,
linkWidth = JS("function(d) { return Math.sqrt(d.value); }"),
radiusCalculation = JS(" Math.sqrt(d.nodesize)+6"), charge = -120,
linkColour = "#666", opacity = 0.6, zoom = FALSE, legend = FALSE)