networkD3包小試牛刀

力導向網絡圖

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

source    target    value
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)

發佈了32 篇原創文章 · 獲贊 11 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章