网站开发外文参考文献,网站建设网络营销文章,建站系统wordpress下载,国外网站怎么注册二、图的创建
图分有向图和无向图#xff0c;所以图的创建有各自的实现方式。
1、手工创建图#xff1a;
1-1 通过文本创建#xff1a;graph_from_literal
通过每项提供两个顶点名#xff08;或ID号#xff09;作为一条边的格式#xff0c;手动创建图#xff0c;顶点…二、图的创建
图分有向图和无向图所以图的创建有各自的实现方式。
1、手工创建图
1-1 通过文本创建graph_from_literal
通过每项提供两个顶点名或ID号作为一条边的格式手动创建图顶点间用减号表示无向边此时减号的数量不限一个减号或N个减号都代表两个顶点间存在一条无向边用加号表示有向边箭头所在的位置。如果函数的参数为空会创建一个空图。
函数参数中用来表示顶点name的实参不需要用引号引起来。
如果图中需要孤立点只输入顶点名即可。 graph_from_literal()
IGRAPH 1932ffc U--- 0 0 -- edges from 1932ffc:g - graph_from_literal(Alice - Bob - Cecil - Alice,Daniel - Cecil - Eugene,Cecil - Gordon)g
IGRAPH 503ae37 UN-- 6 6 -- attr: name (v/c)edges from 503ae37 (vertex names):
[1] Alice--Bob Alice--Cecil Bob --Cecil Cecil--Daniel Cecil--Eugene
[6] Cecil--Gordon graph_from_literal( A--B, C--D, E--F, G--H, I, J, K ) %% print_all()
IGRAPH a5903c8 UN-- 11 4 -- attr: name (v/c)edges from a5903c8 (vertex names):
[1] A--B C--D E--F G--H:可以用来定义顶点的集合用:连接的顶点属于同一个集合彼此之间没有边连接但集合中的每个顶点与用加号或减号连接的另一个集合中的每一个顶点都有边连接 g - graph_from_literal( A:B:C:D -- T:E:W )V(g)$color - rep(c(red,green),c(4,3))plot(g)对igraph来说顶点的name属性值是字符型就可以所以也可以将顶点name的值设置为符号当然这在实践中意义不大 1-2 搭积木式之加函数
如前所述顶点和边是图的基本元素并且边是基于顶点形成的关系描述所以一定手动创建图必须先有顶点。
前面说的graph_from_literal函数在一个函数内部完成了顶点和边的设置。搭积木的完善图则把顶点和边的创建或删除分离各自定义了独立的函数使用户可以“纯手工”打造图。
在已有的图上只要类是“igraph”就可以所以这个图可以是一个全空的图对顶点和边都可以用 | -函数甚至可以直接将一个图加到另一个图上。
前面说过要用集合的理念来思考图的操作
命名图命名图如果两者都是命名图则执行并集union操作
g - make_ring(10) %% set_vertex_attr(name,value letters[1:10])
g2 - make_ring(5) %% set_vertex_attr(name,value letters[1:5])
plot(gg2)无名图无名图如果两者都是无名图则执行不相交并disjoint_union操作
g - make_ring(10)
g2 - make_ring(5)
disjoint_union(g,g2) %% plot()命名图无名图如果一个图是命名图另一个是无名图结果还是不相交并但无名图的顶点标签是空
g - make_ring(10) %% set_vertex_attr(name,value letters[1:10])
g2 - make_ring(5)
plot(gg2)图数字在图中添加数字指定数量的顶点只添加顶点不添加边。如果图是无名图plot的结果显示顶点ID如果图是命名图新添加的顶点没有标签。 par(mfrowc(1,2))g - make_ring(10)plot(g5)title(无名图)g - make_ring(10) %% set_vertex_attr(name,value letters[1:10])plot(g5)title(命名图)图字符向量将字符向量视为顶点的name在图中添加相应数量的顶点只添加顶点不添加边。如果图是无名图plot时新添加的顶点显示标签原有的顶点标签显示为空如果图是命名图全部显示标签。 图vertice()向图添加参数中提供的顶点并可以同时设置新添加顶点的属性这也是本函数的主要用途。
注意此时vertice()中的参数默认是新添加顶点的name即便输入的是数字也被用作顶点的name而不是id
g - make_ring(10) %% set_vertex_attr(color,value green)%% set_vertex_attr(name,value letters[1:10])
plot(gvertices(1:5,colorred))图edges(): 因为边必须依赖顶点而存在所以新添加的边必须基于图中已有的顶点。如果想添加图中原有顶点之外的顶点的边必须先添加顶点。
g - make_ring(10) %% set_edge_attr(color,valueblue) %% set_edge_attr(weight,value4)
(gedges(sample(1:10,4),colorred,weight20)) %% plot()如果图是无名图只能用顶点ID设置边如果是命名图可以用name属性设置边当然也可以用顶点ID设置边
图path()安装path()指定的路径添加边。当然这些顶点必须已经存在于图中 1-3 通过函数添加顶点add_vertices
与vertice()类似在设置添加顶点数量的同时可设置顶点属性两者的区别是
图 vertice()中是个函数不需要管道运算符
add_vertices本身是个函数需要与管道运算符连用。
make_ring(10) %% set_vertex_attr(color,valuegreen) %% add_vertices(5,colorred) %% plot()1-4 通过函数添加边add_edges
一般与管道运算符连用可以同时设置边的属性。注意如果要一次添加多条边需要用c()函数将这些边包裹起来。
make_empty_graph(10) %% set_edge_attr(color,value blue) %% add_edges(c(1,3,2,4,6,9),colorred) %% plot()1-5 删除顶点delete_vertices
可以通过顶点ID或name删除指定的顶点
如果原图是无名图通过顶点ID删除顶点后新图的顶点ID被重新分配
g - make_ring(10) %% set_vertex_attr(color,value green) %% set_vertex_attr(index7:9,namecolor,value red)
plot(g)
g %% delete_vertices(7:9) %% plot()
title(删除后所有顶点ID被重新分配)如果是命名图新图仍然保留原顶点名
g - make_(ring(10),with_vertex_(nameletters[1:10]))
plot(g)
g %% delete_vertices(7:9) %% plot()1-6 删除边 delete_edges
用边ID指定要删除的边。注意这里一个坑前面习惯了用顶点了表述边主观认为把函数中的参数设置为c(1,2,5,6)会删除顶点1和顶点2之间的边、以及顶点5和顶点6之间的边一个删除两条边。其实不然本函数的这个参数如果直接输入数字的话igraph把这些数字看作边的ID号所以这样设置会删除4条边不是2条。
g - make_ring(10)
plot(g)
g %% delete_edges(c(1,2,5,6)
) %% plot()想用顶点来指定要删除的边用a|b或3|4的格式。注意需要用引号引起来。
g - make_ring(10)
plot(g)
g %% delete_edges(c(1|2,5|6)
) %% plot()或者用get.edge.ids函数也可以将参数中相邻的两个数字解释为顶点的ID并返回正确的边ID效果与前面一样。 get.edge.ids(g,c(1,2,5,6))
[1] 1 5
g %% delete_edges(get.edge.ids(g,c(1,2,5,6))
) %% plot()