R语言igraph软件包方法

更新时间:2023-06-27 18:33:55 阅读: 评论:0

R语⾔igraph软件包⽅法
⼀、igraph软件包创建图和⽹络
R语⾔的术语⽹络是加权⽆向图和加权有向图。igraph 是⼀个独⽴的库,底层是 C,上层有 Python 和 R 接⼝,主要做图和⽹络⽅⾯的计算,附带绘图功能。
调试顶点的⼤⼩(参数vertex.size)和顶点标签(参数)的⼤⼩。
igraph中图的数据结构
igraph中基本的graph structure采⽤的是EdgeList,所以在igraph中⾃然⽽然的允许multiedge的存在,当然它也提供了Adjancency list(对某些算法,⼤部分算法接受
的参数是edgelist)。数据结构igraph_t定义如下:
铁皮石斛怎么吃
typedef struct igraph_s {
igraph_integer_t n;  #图的顶点个数
igraph_bool_t directed;  #有向图,⽆向图
igraph_vector_t from;  #边的起点
igraph_vector_t to;      #边的终点
igraph_vector_t oi;        #尾结点下标
igraph_vector_t ii;        #头结点下标
igraph_vector_t os;
igraph_vector_t is;
void *attr;
} igraph_t;
igraph中顶点和边都是从0开始编号。n是图的顶点个数,directed是有向图标识。所有边的顶点存储在from和to两个向量(igraph_vector_t)中,oi[e]对应的是编号为e的边所
对应的尾结点在from中的index,同样ii[e]对应于e的头节点在to中的index(也就是是说e 可以表⽰为 from[oi[e]] -> to[ii[e]])。所以from,to,oi,ii都是长度与边数相同的向
量。
os和is则和oi,ii相反,表⽰的是从顶点到边的映射,从顶点v出发的第⼀条边为 from[oi[os[v]]] -> to[ii[os[v]]],所以当os[v] == os[v + 1]时候就表⽰从该顶点没有出边。
向量is同理。os,is都是长度为顶点数加⼀的向量。
操作igraph_t的⼀些基本API如igraph_empty, igraph_adjacent等见于⽂档⼿册。
因为采⽤的是edgelist的结构,所以增/减边(顶点)的操作在igraph中是相当耗费时间的。add和delete操作的时间复杂度基本上都是O(|V| + |E|)或者O(|V|)。
⼆、例题
eg1.有weight的图
require(igraph)
d = data.frame(p1 = c('a', 'b', 'c'),
p2 = c('b', 'c', 'a'),
weight = c(1, 2, 4))
g = graph.data.frame(d, directed = TRUE)  #有向图
plot(g, edge.width=E(g)$weight)
eg2.  顶点的颜⾊
ramp =colorRamp(c("red", "white","blue"));
#ramp(q(0, 1, length = length(unique(label))))荨麻疹症状
英文流行歌曲panel=rgb( ramp(q(0, 1, length = length(unique(label)))), max = 255)#设定颜⾊
⽤户可以根据color、rgb值和hsv值来设定不同的颜⾊
注释:R语⾔设定颜⾊的⽅法
library(grDevices);
ramp <- colorRamp(c("red", "white","blue"));
ramp(q(0, 1, length = 5))
[,1]  [,2]  [,3]
[1,] 255.0  0.0  0.0
[2,] 255.0 127.5 127.5
[3,] 255.0 255.0 255.0
[4,] 127.5 127.5 255.0
[5,]  0.0  0.0 255.0
color<-rgb( ramp(q(0, 1, length = 5)), max = 255)
color
[1] "#FF0000" "#FF7F7F" "#FFFFFF" "#7F7FFF" "#0000FF"
eg3.  邻接矩阵的图
library(igraph)
cells<-c(0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,3,0,3,3,3,0,0,0,0,0,0,0,0,3,0,3,1,1,1,0,0,0,0,0,0,1,1
,0,3,0,0,0,0,1,0,0,0,0,0,1,1,3,1,0,0,3,0,0,0,0,0,0,0,0,0,3,1,0,3,0,0,3,1,0,3,0,0,1,1,3,1,0,0,0,0,0,3,0,3,1,1,0,0,0,0,1,3,3,0,0,3,1,3,0,0,0,0,0,0,0,0,1,3,3,0,0,3,1,1,0,0,0,0,0,0,0,0,1,0,0,0, cells=matrix(cells,14,14,byrow=T)          #创建邻接矩阵
> cells
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,]    0    0    1    0    1    1    0    1    0    0    0    0    0
[2,]    0    0    1    0    1    1    0    1    0    0    0    0    0
[3,]    1    1    0    3    0    3    3    3    0    0    0    0    0遗忘英文
[4,]    0    0    3    0    3    1    1    1    0    0    0    0    0
[5,]    1    1    0    3    0    0    0    0    1    0    0    0    0
[6,]    1    1    3    1    0    0    3    0    0    0    0    0    0
[7,]    0    0    3    1    0    3    0    0    3    1    0    3    0
[8,]    1    1    3    1    0    0    0    0    0    3    0    3    1
[9,]    0    0    0    0    1    3    3    0    0    3    1    3    0
[10,]    0    0    0    0    0    0    1    3    3    0    0    3    1
[11,]    0    0    0    0    0    0    0    0    1    0    0    0    0
[12,]    0    0    0    0    0    0    3    3    3    3    0    0    1
[13,]    0    0    0    0    0    0    0    1    0    1    0    1    0
[14,]    0    0    0    0    0    0    0    1    0    1    0    1    1
[,14]
[1,]    0
[2,]    0
[3,]    0
[4,]    0
[5,]    0
[6,]    0
[7,]    0
[8,]    1
[9,]    0
[10,]    1胰岛素有几种
[11,]    0
[12,]    1
[13,]    1
[14,]    0
myCoord<-c(1,2,7.5,5,3,6,6,8,8,11,8,10,11,13,2,1,2,4,5.5,1,6,4,9,8,14,5.5,2.2,4) myCoord<-matrix(myCoord,14,2,byrow=F)    #创建顶点坐标
> myCoord
[,1] [,2]
[1,]  1.0  2.0
[2,]  2.0  1.0
[3,]  7.5  2.0
[4,]  5.0  4.0
[5,]  3.0  5.5
[6,]  6.0  1.0
[7,]  6.0  6.0
[8,]  8.0  4.0
[9,]  8.0  9.0
[10,] 11.0  8.0
[11,]  8.0 14.0
[12,] 10.0  5.5
[13,] 11.0  2.2
[14,] 13.0  4.0
cnames=paste("e",1:14,p="")  #顶点标签
黄河的传说> cnames
[1] "e1"  "e2"  "e3"  "e4"  "e5"  "e6"  "e7"  "e8"  "e9"  "e10" "e11" "e12"
[13] "e13" "e14"
g=graph.adjacency(cells,mode="undirected",weighted=T)  #创建图
> g
IGRAPH U-W- 14 35 --
+ attr: weight (e/n)
+ edges:
[1]  1-- 3  1-- 5  1-- 6  1-- 8  2-- 3  2-- 5  2-- 6  2-- 8  3-- 4  3-- 6
[11]  3-- 7  3-- 8  4-- 5  4-- 6  4-- 7  4-- 8  5-- 9  6-- 7  6-- 9  7-- 9
[21]  7--10  7--12  8--10  8--12  8--13  8--14  9--10  9--11  9--12 10--12 [31] 10--13 10--14 12--13 12--14 13--14
plot(lor="green",layout=myCoord,vertex.shape="square",
vertex.label=cnames,vertex.label.font=2,vertex.label.dist=-1,
vertex.label.degree=-pi/2,lor="black",
lor="gray",
edge.width=E(g)$lor="gray")
igraph创建图政府采购管理办法
三、函数应⽤
1.输出图中所有节点
  V(g)$name
  g是相应的图
2.根据节点degree输出节点
  V(g)[degree(g)>3]  将图中degree⼤于3的节点输出
  g是相应的图
3.
V(g) #返回图g的顶点
E(g) #返回图g的边
4.图形建⽴:
(1)
> g=graph(c(1,2,5,6,1,4),n=6,directed=T)
> plot(g)
(2)
>g=graph.formula(Alice-Bob-Cecil-Alice,Daniel-Cecil-Engene,Cecil-Gordon)
> plot(g)
(3)
graph.data.frame() #从数据框画图
graph.adjacency()  #从邻接矩阵创建图
(4)
ba.game() #根据Barabasi-Albert模型⽣成scale-free图
(5)
vcount(g)/ecount(g) #返回图g的定点数、边数
四年级比喻句
is.clusters(g) #图g有多少分⽀
(6)
设置图的属性:aph/vertex/edge()  # 具体⽤法详见help
5.可视化
(1)plot()命令 :画普通的⼆维图
(2)tkplot():交互绘图命令
例:
> library(igraph)
> g=barabasi.game(100,m=1)
>id=tkplot(g,vertex.size=4,vertex.label=lor="black",edge.arrow.size=0.lor="red") > coords <- rds(id)
(3)rgplot:画3D图

本文发布于:2023-06-27 18:33:55,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1053144.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:顶点   绘图   是从   数据结构   编号
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图