前段時候因爲項目的緣由,須要畫圖,而後開始接觸R語言的igraph包,網上零零散散的蒐羅了很多的信息,放在這邊交流分享的同時也給本身留個備份吧~算法
1.首先是讀取文件,基本選用的都是csv文件 spring
edge1<-read.csv("D:/9th_smj/onetimecut.csv",header=F) vertex3<-read.csv("D:/9th_smj/vertex.csv",header=F)
2.設置變量的格式dom
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設置圖的佈局方式 spa
選項有: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設置節點的大小:不一樣節點不一樣大小3d
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設置節點的顏色:不一樣標記有不用的顏色orm
color<-read.csv("c:/color.csv",header=F) col<-c("red","skyblue") V(g)$color=col[color[,1]]
4.4 vertex.label設置節點的標記blog
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)