力導向網絡圖
這種圖採用物理上的彈簧模型,將節點之間想象成是用彈簧連接的,然後把這些用彈簧連接的節點扔到桌面上,讓這些彈簧自己彈啊彈,彈啊彈,最後總能停下來,達到一個平衡狀態。這個狀態下的節點連接圖,能力最小,線和線之間的交叉最小。這種方法的學名叫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)