R包igraph探究


     前段時候由於項目的原因,需要畫圖,然后開始接觸R語言的igraph包,網上零零散散的搜羅了不少的信息,放在這邊交流分享的同時也給自己留個備份吧~

     1.首先是讀取文件,基本選用的都是csv文件   

edge1<-read.csv("D:/9th_smj/onetimecut.csv",header=F)
vertex3<-read.csv("D:/9th_smj/vertex.csv",header=F)

    2.設置變量的格式

edge1[,1]=as.character(edge1[,1])
edge1[,2]=as.character(edge1[,2])
edge1[,3]=as.character(edge1[,3])
edge1[,4]=as.character(edge1[,4])
edge<-edge1[c(1,3)] vertex3[,1]=as.character(vertex3[,1]) vertex3[,2]=as.character(vertex3[,2])

  3.圖構建

people = data.frame(id = vertex3[,1], name = vertex3[,2])

g=graph.data.frame(d=edge,direct=T,vertices=people) 

  4.畫圖

png('D:/9th_smj/cuttoone.png',width=900,height=900)
set.seed(20)#設定種子節點,同一種布局畫出來的圖就是可以重復,不然即使同一種布局,展現的時候由於位置的隨機也會呈現出不一樣的結果
plot(g, layout = layout.fruchterman.reingold, vertex.size = V(g)$size+2,vertex.color=V(g)$color,vertex.label=V(g)$label,vertex.label.cex=1,edge.color = grey(0.5), edge.arrow.mode = "-",edge.arrow.size=5)
dev.off() 

  

     針對plot函數的一些參數,特別解釋下:

     4.1  layout設置圖的布局方式  

選項有:layout、layout.auto、layout.bipartite、layout.circle、layout.drl、layout.fruchterman.reingold、layout.fruchterman.reingold.grid、layout.graphopt、layout.grid、layout.grid.3d、layout.kamada.kawai、layout.lgl、layout.mds、layout.merge、layout.norm、layout.random、layout.reingold.tilford、layout.sphere、layout.spring、layout.star、layout.sugiyama、layout.svd

     4.2  vertex.size設置節點的大小:不同節點不同大小

de<-read.csv("c:/degree-info.csv",header=F)
V(g)$deg<-de[,2]
V(g)$size=2
V(g)[deg>=1]$size=4
V(g)[deg>=2]$size=6
V(g)[deg>=3]$size=8
V(g)[deg>=4]$size=10
V(g)[deg>=5]$size=12
V(g)[deg>=6]$size=14

     4.3  vertex.color設置節點的顏色:不同標記有不用的顏色

color<-read.csv("c:/color.csv",header=F)
col<-c("red","skyblue")
V(g)$color=col[color[,1]]

    4.4  vertex.label設置節點的標記

V(g)$label=V(g)$name

vertex.label=V(g)$label

    4.5  vertex.label.cex設置節點標記的字體大小

    4.6  edge.color設置邊的顏色:不同的邊有不一樣的顏色

E(g)$color="grey"
for(i in 1:length(pa3[,1])){
	E(g,path=pa3[i,])$color="red"
}
edge.color=E(g)$color

   4.7  edge.arrow.mode設置邊的連接方式

   4.8  edge.arrow.size設置箭頭的大小

   4.9  設置邊的寬度

E(g)$width=1

 

    5.聚類分析

  感覺igraph包所提供的聚類算法還是很多的,將幾種常用的列出,隨后有時間的話再附上算法思想及參考文獻

    5.1  邊的中介度聚類

system.time(ec <- edge.betweenness.community(g))
print(modularity(ec))
plot(ec, g,vertex.size=5,vertex.label=NA)

  

    5.2  隨機游走

system.time(wc <- walktrap.community(g))
print(modularity(wc))
#membership(wc)
plot(wc , g,vertex.size=5,vertex.label=NA)

  

    5.3  特征值(個人理解覺得類似譜聚類)

system.time(lec <-leading.eigenvector.community(g))
print(modularity(lec))
plot(lec,g,vertex.size=5,vertex.label=NA)

  

    5.4  貪心策略?

system.time(fc <- fastgreedy.community(g))
print(modularity(fc))
plot(fc, g,vertex.size=5,vertex.label=NA)

  

    5.5  多層次聚類

system.time(mc <- multilevel.community(g, weights=NA))
print(modularity(mc))
plot(mc, g,vertex.size=5,vertex.label=NA)

  

     5.6  標簽傳播

system.time(lc <- label.propagation.community(g))
print(modularity(lc))
plot(lc , g,vertex.size=5,vertex.label=NA)

  

 

    6.文件輸出

zz<-file("d:/test.txt","w")
cat(x,file=zz,sep="\n")
close(zz)

  

   7.查看變量數據類型和長度

mode(x)
length(x)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM