R語言利用igraph和networkD3包快速入門做出炫酷的社交網絡圖等幾類圖。

1、igraph包繪製社交關係圖(也有叫知識圖譜的)

 繪圖的快速入門技巧是三步:1、看數據源和數據類型,這個一定要弄清楚。2、掌握基本的繪圖函數或者直接借用別人的代碼,加上第一步對數據源的瞭解,很容易繪製漂亮圖形。3、通過閱讀官方文檔詳細瞭解函數的參數設定,對圖形進行美化。下面我會將一些參數意義都在代碼裏體現。

####igraph
library(igraph)#包的安裝不敘述了,比較簡單
###讀入數據源
data1<-read.graph("http://cneurocvs.rmki.kfki.hu/igraph/karate.net",format="pajek")
summary(data1)
# data1<- read.csv('singers-sub.csv', head=T,fileEncoding='UTF-8',stringsAsFactors=F)#讀取本地數據源
#數據都是一樣的都是有兩列,邊的兩個節點。一種是直接網頁的,一種是本地文件
# data1 <- graph.data.frame(singer) #轉化爲圖數據結構
###
plot(data1)#最基本的圖
###作網絡圖的美化要點,1、佈局;2、節點屬性;3、線條屬性
plot(data1,
     layout=layout.reingold.tilford(data1,circular=T),  #layout.fruchterman.reingold,局方式發散的,
     #還有環形佈局layout.circle,分層佈局layout.reingold.tilfordbud,中心向外發散layout.reingold.tilford(data1,circular=T)
     vertex.size=10,     #節點大小
     vertex.shape='rectangle',    #節點不帶邊框none,,圓形邊框circle,方塊形rectangle
     vertex.color="yellow",#h紅色red,藍色blue,cyan,yellow等
     vertex.label.cex=1.0,    #節點字體大小
     vertex.label.color='black',  #節點字體顏色,red
     edge.arrow.size=0.3,#連線的箭頭的大小,若爲0即爲無向圖,當然有些數據格式不支持有向圖
     edge.color="black")  #連線顏色    

###設置自動着色
#
source("http://michael.hahsler.net/SMU/ScientificCompR/code/map.R")#映射爲不同顏色

plot(data1,
     layout=layout.reingold.tilford(data1,circular=T),  #layout.fruchterman.reingold,局方式發散的,
     #還有環形佈局layout.circle,分層佈局layout.reingold.tilfordbud,中心向外發散layout.reingold.tilford(data1,circular=T)
     vertex.size=map(degree(data1),c(1,20)),     #節點大小根據聯繫人多少
     vertex.shape='circle',    #節點不帶邊框none,,圓形邊框circle,方塊形rectangle
     vertex.color=map(degree(data1),c(1,20)),#節點顏色大小,根據聯繫人多少
     vertex.label.cex=1.0,    #節點字體大小
     vertex.label.color='black',  #節點字體顏色,red
     edge.arrow.size=0.3,   #連線的箭頭的大小,連線的箭頭的大小,若爲0即爲無向圖
     edge.color="black")   #連線顏色 
##另外,igraph包功能強大,很多屬性,可建立數據集,支持多種數據格式導入,可以分區畫色,加標籤,分層顯示,只顯示某些點的關係
##自定義節點顏色,形狀等等。這些需要進一步的就需要閱讀專門的文檔,若是簡單入門,這個即可。

繪製的效果分別如下:





第三幅經過美化的效果明顯很好。igraph包的內容比較多,請參考博客:

http://blog.csdn.net/sinat_26917383/article/details/51436643

還有《網絡數據的統計分析_R語言實踐》這本書,我已經將中英文版都上傳到http://download.csdn.net/detail/abc200941410128/9861400

2、networkD3包繪製動態圖

d3network包可以輕鬆創建基於Htmlwidgets框架的網絡圖。它目前支持三種類型的網絡圖:
力導向圖,可以顯示覆雜的網絡劃分關係;
桑基圖(Sankeydiagram),利於展現分類維度間的相關性,以流的形式呈現共享同一類別的元素數量。特別適合表達集羣的發展,比如展示特定羣體的人數分佈等;
Reingold-Tilford樹型圖,可以把一個樹形結構的數據,用不重疊、緊湊、分層的形式展示出來。

簡單力向圖:

library(networkD3)
data2<- read.csv('singers-sub.csv', head=T,fileEncoding='UTF-8',stringsAsFactors=F)#讀取本地數據源
simpleNetwork(data2,
              fontFamily="宋體",#字體設置如"華文行楷" 等
              fontSize = 20, #節點文本標籤的數字字體大小(以像素爲單位)。
              linkColour="black",#連線顏色,black,red,blue,  
              nodeColour="blue",#節點顏色,red,藍色blue,cyan,yellow等
              charge = -300,#數值表示節點排斥強度(負值)或吸引力(正值)  
              opacity=0.9,#透明度,1及以上爲不透明,0爲完全透明  
              zoom=TRUE #可縮放
              )
數據源singers-sub.csv格式是兩列式的,文件是從網上找到的,如下,

圖的效果是可以拖拉、局部顯示、雙擊放大等,具體參數意義間代碼註釋。



下面是比較複雜點的力向圖,數據源不止兩列,分爲兩個數據框:

data(MisLinks)
data(MisNodes)
forceNetwork(Links = MisLinks,#線性質數據框
             Nodes = MisNodes,#節點性質數據框

             Source = "source",#連線的源變量
             Target = "target",#連線的目標變量
             Value = "value",#連線的粗細值
             NodeID = "name",#節點名稱
             Group = "group",#節點的分組
             Nodesize = "size" ,#節點大小,節點數據框中
             ###美化部分
             fontFamily="宋體",#字體設置如"華文行楷" 等
             fontSize = 20, #節點文本標籤的數字字體大小(以像素爲單位)。
             linkColour="black",#連線顏色,black,red,blue,  
              #colourScale ,linkWidth,#節點顏色,red,藍色blue,cyan,yellow等
             charge = -100,#數值表示節點排斥強度(負值)或吸引力(正值)  
             opacity = 0.9,
             legend=T,#顯示節點分組的顏色標籤
             arrows=T,#是否帶方向
             bounded=F,#是否啓用限制圖像的邊框
             #opacityNoHover=1.0,#當鼠標懸停在其上時,節點標籤文本的不透明度比例的數值
             zoom = T)#允許放縮,雙擊放大
數據源爲兩個data.frame格式的文件,一個存的是關係或者說連線3屬性(起始點、終點、數據value在圖中用線的粗細表示);一個是節點屬性(節點名、節點所屬組(類)、節點大小):



其他繪圖屬性調節,在代碼裏已經註釋的比較詳細,圖的效果:




3、桑基圖和樹形圖

這兩種圖也是networkD3包裏的圖。這兩種圖不做過多解釋說明,前者用的地方較少也比較難懂,後者不怎漂亮就是一個聚類圖。

###桑基圖
#數據源可以參照力向圖,但是一般桑基圖不好懂,主要用來描述工程流程
#Sankey圖表直觀地強調了系統內的主要轉移或流程。它們有助於爲整體流動找出主要貢獻。
#自動着色
sankeyNetwork(Links = MisLinks,#線性質數據框
              Nodes = MisNodes,#節點性質數據框
              
              Source = "source",#連線的源變量
              Target = "target",#連線的目標變量
              Value = "value",#連線的粗細值
              NodeID = "name",#節點名稱
              #NodeGroup = "group",#節點的分組
              fontFamily="宋體",#字體設置如"華文行楷" 等
              fontSize = 12, #節點文本標籤的數字字體大小(以像素爲單位)。
              #colourScale ,linkWidth,#節點顏色,red,藍色blue,cyan,yellow等
              units="TWH",
              nodeWidth = 30#節點寬度
             )

###樹形圖
hc <- hclust(dist(USArrests), "ave")


dendroNetwork(hc, height = 600,#高度
              width=800,#寬度
              fontSize=8,#字體大小
              linkColour="hexadecimal",#該值設定不明顯
              nodeColour="red", #map(1:length(USArrests[,1]),c(1,10))  自動着色沒實驗成功
              nodeStroke="blue",##節點邊框顏色
              textColour="cyan",#字體顏色,可以是向量形式
              textOpacity=0.7,#文本透明度
              opacity=0.9,#透明度
              #margin=NULL,默認空數字值或繪圖邊距的名稱列表(頂部,右側,底部,左側)。 適當設置邊距以適應長文本標籤。
              #linkType="diagonal",#直線或者曲線,默認直線
              treeOrientation="vertical", #佈局,默認水平橫向
              zoom=T # 是否放縮
                         )


桑基圖的意義類似力向圖,用線寬和節點長度表示不同值或權重,這裏圖的結果如下:


樹形圖:









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