Igraph入门指南 4

二、图的创建

图分有向图和无向图,所以图的创建有各自的实现方式。

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(g+g2)

在这里插入图片描述

  • 无名图+无名图:如果两者都是无名图,则执行不相交并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(g+g2)

在这里插入图片描述

  • 图+数字:在图中添加数字指定数量的顶点,只添加顶点,不添加边。如果图是无名图,plot的结果显示顶点ID,如果图是命名图,新添加的顶点没有标签。
> par(mfrow=c(1,2))
> g <- make_ring(10)
> plot(g+5)
> title('无名图')
> g <- make_ring(10) %>% set_vertex_attr('name',value = letters[1:10])
> plot(g+5)
> 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(g+vertices(1:5,color='red'))

在这里插入图片描述

  • 图+edges(): 因为边必须依赖顶点而存在,所以新添加的边必须基于图中已有的顶点。如果想添加图中原有顶点之外的顶点的边,必须先添加顶点。
g <- make_ring(10) %>% set_edge_attr('color',value='blue') %>% set_edge_attr('weight',value=4)
(g+edges(sample(1:10,4),color='red',weight=20)) %>% plot()

在这里插入图片描述

如果图是无名图,只能用顶点ID设置边,如果是命名图,可以用name属性设置边,当然也可以用顶点ID设置边

  • 图+path():安装path()指定的路径添加边。当然,这些顶点必须已经存在于图中

在这里插入图片描述

1-3 通过函数添加顶点:add_vertices

与`+vertice()类似,在设置添加顶点数量的同时,可设置顶点属性,两者的区别是:

图 + vertice()中+是个函数,不需要管道运算符;

add_vertices本身是个函数,需要与管道运算符连用。

make_ring(10) %>% set_vertex_attr('color',value='green') %>% add_vertices(5,color='red') %>% 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),color='red') %>% plot()

在这里插入图片描述

1-5 删除顶点:delete_vertices

可以通过顶点ID或name删除指定的顶点

如果原图是无名图,通过顶点ID删除顶点后,新图的顶点ID被重新分配

g <- make_ring(10) %>% set_vertex_attr('color',value = 'green') %>% set_vertex_attr(index=7:9,name='color',value = 'red')
plot(g)  
g %>% delete_vertices(7:9) %>% plot()
title('删除后所有顶点ID被重新分配')

在这里插入图片描述

如果是命名图,新图仍然保留原顶点名

g <- make_(ring(10),with_vertex_(name=letters[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()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【敬伟ps教程】文字处理工具

文章目录 文字工具使用方式文字图层文字工具选项字符面板段落面板文字工具使用方式 文字工具(快捷键T),包含横排和直排两种类型 创建文本两种类型:点式文本、段落文本 创建文字方式 1、在画面上单击,出现文字光标,可输入文字,然后需要在工具栏中点击“√”或者 Ctrl+…

数学建模-动态规划(美赛运用)

动态规划模型的要素是对问题解决的抽象&#xff0c;其可分为&#xff1a; 阶段。指对问题进行解决的自然划分。例如&#xff1a;在最短线路问题中&#xff0c;每进行走一步的决策就是一个阶段。 状态。指一个阶段开始时的自然状况。例如&#xff1a;在最短线路问题中&#xff…

docker 运行异构镜像

概述 关于docker镜像在不同的cpu架构下运行报错的解决办法&#xff0c;作者踩坑验证&#xff0c;在此分享经验 某次工作遇到需要银行内部部署docker镜像&#xff0c;由于行内已经开始走信创的路线&#xff0c;使用鲲鹏系统&#xff0c;arm架构&#xff0c;记过就遇到了standa…

ComfyUI-Flowty-TripoSR

这是一个自定义节点&#xff0c;可让您直接从ComfyUI使用TripoSR。TripoSR 是由 Tripo AI 和 Stability AI 合作开发的最先进的开源模型&#xff0c;用于从单个图像快速前馈 3D 重建。&#xff08;TL;DR 它从图像创建 3d 模型。这篇文章主要介绍了将TripoSR作为ComfyUI节点的配…

华容道问题求解_详细设计(四)之查找算法2_BFS

&#xff08;续上篇&#xff09; 利用BFS查找&#xff0c;会找到最短路径&#xff08;没有权重的图&#xff09;&#xff0c;这个道理比较简单&#xff0c;这是由于寻找路径的方法都是从起点或者接近起点的位置开始的。查找过程如果画出图来&#xff0c;类似于一圈圈的放大&…

Leetcode每日一题】 二维前缀和 - 矩阵区域和(难度⭐⭐)(31)

1. 题目解析 题目链接&#xff1a;1314. 矩阵区域和 题目乍一看很晦涩难懂&#xff0c;又是大于等于又是k的 仔细分析&#xff0c;题目所说的意思就是以[i,j]为中心&#xff0c;求上下左右向外拓展k个单位的矩阵和&#xff0c;放在名为answer的矩阵中&#xff0c;最后返回ans…

Session登陆实践

Session登陆实践 Session登录是一种常见的Web应用程序身份验证和状态管理机制。当用户成功登录到应用程序时&#xff0c;服务器会为其创建一个会话&#xff08;session&#xff09;&#xff0c;并在会话中存储有关用户的信息。这样&#xff0c;用户在与应用程序交互的整个会话…

设计模式 代理模式

代理模式主要使用了 Java 的多态&#xff0c;主要是接口 干活的是被代理类&#xff0c;代理类主要是接活&#xff0c; 你让我干活&#xff0c;好&#xff0c;我交给幕后的类去干&#xff0c;你满意就成&#xff0c;那怎么知道被代理类能不能干呢&#xff1f; 同根就成&#xff…

档案室管理人员有哪些岗位

档案室管理人员的岗位可以分为以下几类&#xff1a; 1. 档案文书管理岗位&#xff1a;负责档案文书的管理、整理、归档和借阅工作&#xff0c;包括档案资料的分类、编目、装订、存储等。 2. 档案数字化管理岗位&#xff1a;负责将纸质档案数字化&#xff0c;进行扫描、转换、存…

mac下终端命令提示补全

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 mac下终端命令提示补全 前言Zsh-autosuggestions原理解析&#xff1a;智能提示的工作方式1. 命令历史分析&#xff1a;2. 智能提示生成&#xff1a;3. 用户交互和选择&#xff1a;4. 配置和个性化&…

Linux基础IO【 详 解 】

文章目录 C语言文件IOC语言文件接口汇总默认打开的三个流 系统文件IOopenclosewriteread 文件描述符fd文件描述符的分配规则重定向重定向的本质dup2 FILEFILE当中的文件描述符FILE当中的缓冲区 理解文件系统初识inode磁盘分区与格式化介绍 软硬链接软链接硬链接软硬链接的区别 …

CorelDRAW Graphics Suite2024专业图形设计软件Windows/Mac最新25.0.0.230版

CorelDRAW Graphics Suite 2024是一款专业的图形设计软件&#xff0c;它集成了CorelDRAW Standard 2024和其他高级图形处理工具&#xff0c;为用户提供了全面的图形设计和编辑解决方案。 该软件拥有强大的矢量编辑功能&#xff0c;用户可以轻松创建和编辑矢量图形&#xff0c;…

UI 易用性测试 以及自动化实现!

GUI 是指图形用户界面&#xff0c;UI 是指用户界面&#xff0c;对于纯软件系统&#xff0c;这两者没有本质的区别&#xff0c;GUI易用性测试与 UI 易用性测试内容一致。但是如果测试的对象是一个产品&#xff0c;这两者则存在区别&#xff0c;对于产品 UI 则不仅仅包括 GUI&…

多线程-线程池原子性并发工具类

1.线程池 1.线程状态 虚拟机中线程的六种状态 新建状态&#xff08;NEW&#xff09; --创建线程 就绪状态&#xff08;RUNNABLE&#xff09; --start方法 阻塞状态&#xff08;BLOCKED&#xff09; --无法获得锁对象 等待状态&#xff08;WAITING&#xff09; …

springboot254小区团购管理

小区团购管理设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装小区团购管理软件来发挥其高效地信…

菜鸟笔记-14Python绘图颜色使用

Python中绘图主要依赖于各种库&#xff0c;其中matplotlib是最常用且功能强大的一个。在matplotlib中&#xff0c;你可以使用各种颜色来表示不同的数据点、线条或填充区域。下面我将详细介绍如何在Python中使用matplotlib来设置绘图颜色&#xff0c;并给出具体的例子。 14.1颜…

Spring循环依赖问题分析

对象分类&#xff1a;1.成品对象&#xff1a;实例化完成 初始化完成 2.半成品对象&#xff1a; 实例化完成 初始化未完成 实例化和初始化可以分开执行是解决循环依赖问题的关键 一级缓存&#xff1a;保存完成的bean对象 二级缓存&#xff1a;存储成品对象 三级缓存&#xff1a…

《北上广深杭》都有哪些最值得加入的互联网大厂

IT行业做技术很公平&#xff0c;没那么看重出身&#xff0c;只要你技术好&#xff0c;能力强&#xff0c;就能进大厂&#xff0c;拿高薪。IT行业算是目前为数不多的比较容易屌丝逆袭的行业之一&#xff0c;IT行业也从来不缺少造富神话。一起加油吧&#xff0c;打工人&#xff0…

Python 创建PPT

本篇为如何使用Python来创建ppt文件。 创建PPT 安装必要的库 命令如下&#xff1a; pip install python-pptx 安装过程&#xff1a; 创建ppt文件 在当前目录下创建一个test的ppt文件。其中包含两页&#xff0c;分别使用了不同的布局。 第一页设置了标题和内容。第二页只设…

【Linux】cpp-httplib库

目录 升级gcc版本 下载cpp-httplib的zip安装包&#xff0c;上传到服务器 ​编辑 简单使用 首先打开gittee,搜索cpp-httplib,选择其中一个即可 也可以点下方链接 cpp-httplib库&#xff1a;cpp-httplib: cpp-httplib (gitee.com) 注意&#xff1a;cpp-httplib在使用的时候需…