igraph包是一个用来解决图与网络问题以及对其进行可视化的包,前几天数学建模做图论的作业我就是用的这个包,这篇博客就写一下如何解决图论中的最短路问题,最大流问题和最小生成树问题,以及图的可视化。

需要声明,我是在看了这个文档(密码为jyhn)之后才写的这篇博客,但该文档之中有些内容已经过时

首先自然要创建一个图的对象,igraph包中创建图的对象的函数是

make_graph(edges, ..., n = max(edges), isolates = NULL,directed = TRUE,dir = directed, simplify = TRUE)
  1. 其中edges参数为边组成的向量,这个向量中的元素既可以是数字也可以是字符,也可以是literals参数(但不经常用)。比如如果是数字,c(1,2)表示一条从点1到点2的边,c(1,2,2,3)表示两条边,一条从1到2,另一条从2到3,注意图中的点的编号不能用0来命名,否则会报错,至于原因就不太清楚啦;字母的原理与数字相同
  2. n为最大边数,只在edges参数中的元素是数字的时候有用,但我还是不太清楚这个参数的实质作用是什么,好像一般情况下用不到。
  3. isolates为孤立的点组成的向量,但只有在edges参数中的元素是字符时才有用,比如make_graph(c('a','b','b','c'),isolates = c('d','e'))这个图有两条边ab,bc,还有两个孤立的点d和e.
  4. directed为一个布尔型参数,TRUE表示有向图,FALSE表示无向图,dir参数与directed参数是一样的,但两者不能同时出现(为什么不干脆去掉一个。。。汗)。
  5. simplify参数只有在edges参数使用literals时才有用。

可以用如下语句创建一个图的对象

library(igraph)
m <- matrix( c(0,1,5, 0,2,4, 0,3,3, 1,5,3, 1,4,5, 2,5,3, 2,6,2, 3,6,2, 4,1,5, 4,7,4, 5,7,3, 6,7,5) + 1,ncol = 3,byrow = T)
#创建一个有向图
g <- make_graph(t(m[,1:2]),directed = TRUE)
#创建一个无向图
h <- make_graph(t(m[,1:2]),directed = FALSE)

我们有时候研究的有些图是有权的,怎么给图赋权呢

graph_attr(g,'weight') <- m[,3]
#或
g <- set_graph_attr(g,'weight',m[,3])
#也可以用第一个函数获得图的权
graph_attr(g,'weight')#得到g的权

图已经创建好了,怎么把它画出来呢?这时候就要用到万能的plot()函数了,plot()函数是一个泛型函数,如果第一个参数是图对象,那么它实际上调用的是plot.graph()函数

plot(graph_object,edge.label,vertex.label,...)
  1. edge.label参数控制点的标签,
  2. vertex.label参数控制边的标签
  3. ...plot()函数原有的控制大小颜色等的参数和plot.graph()中新增的参数,这些都可以通过帮助文档找到
plot(g)
plot(h)
plot(g,edge.label = graph_attr(g,'weight'))
plot(g,edge.label = graph_attr(g,'weight'),vertex.label = c('A','B','C','D','E','F','G','H'))




得到图的对象之后就可以求解最短路,最小生成树和最大流问题了。

#求最大流,source为起点,target为终点,capcity为每条边的最大容量,要注意与边的顺序
#对应
graph.maxflow(g,source = 1,target = 8,capacity = graph_attr(g,'weight'))
#会返回一个列表,里面有各个需要的值
#求最小生成树
mst(g,weights = graph_attr(g,'weight'))
#注意:这里的weights如果缺省,则会使用NULL,并不会使用图自身的权重,感觉这里
#略坑
#求最短路
#shortest_paths(graph, from, to = V(graph), mode = c("out", #"all", "in"),
#  weights = NULL, output = c("vpath", "epath", "both"),
#  predecessors = FALSE, inbound.edges = FALSE)
#最重要的几个参数为graph,from,to,weights,from为起点,to为终点,可以缺
#省,如果缺省则会计算起点到其他所有点的最短路,weights为权重
shortest_paths(g,1,weights = graph_attr(g,'weight'))

R语言igraph包的使用相关推荐

  1. C语言构建网络包,R语言igraph 包-构建网络图(示例代码)

    igaph 是一个项目,目标是建立一条简单,易用的网络分析工具,有 R, python, C/C++ 等语言的具体实现: 项目主页: http://igraph.org/ 在R语言中,对应的就是 ig ...

  2. r语言 bsda包_使用R语言creditmodel包进行Vintage分析或留存率分析

    1 什么是vintage分析? Vintage分析(账龄分析法)被广泛应用于信用卡及信贷行业,这个概念起源于葡萄酒,即不同年份出产的葡萄酒的品质有差异,那么不同时期开户或者放款的资产质量也有差异,其核 ...

  3. R语言caret包构建机器学习回归模型(regression model)、使用DALEX包进行模型解释分析、特征重要度、偏依赖分析等

    R语言caret包构建机器学习回归模型(regression model).使用DALEX包进行模型解释分析.特征重要度.偏依赖分析等 目录

  4. R语言数据包自带数据集之ISwR包的melanom数据集字段解释、数据导入实战

    R语言数据包自带数据集之ISwR包的melanom数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之ISwR包的melanom数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导入数 ...

  5. R语言数据包自带数据集之survival包的colon数据集字段解释、数据导入实战

    R语言数据包自带数据集之survival包的colon数据集字段解释.数据导入实战 #数据字段说明 colon数据集:B/C期结肠癌辅助化疗治疗数据 d # 患者编号 study # 所有患者都是1 ...

  6. R语言数据包自带数据集之survival包的lung数据集字段解释、数据导入实战

    R语言数据包自带数据集之survival包的lung数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之survival包的lung数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导 ...

  7. R语言数据包自带数据集之ToothGrowth数据集字段解释、数据导入实战

    R语言数据包自带数据集之ToothGrowth数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之ToothGrowth数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导入数据 #数 ...

  8. R语言数据包自带数据集之mtcars数据集字段解释、数据导入实战

    R语言数据包自带数据集之mtcars数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之mtcars数据集字段解释.数据导入实战 #会用帮助?或者help函数 #字段说明 #导入包 #导入数据 ...

  9. R语言dplyr包通过数据列的索引重命名数据列实战(Rename Column by Index Position)

    R语言dplyr包通过数据列的索引重命名数据列实战(Rename Column by Index Position) 目录 R语言dplyr包通过数据列的索引重命名数据列实战(Rename Colum ...

最新文章

  1. NSThread Run Loop
  2. 增压的jstack:如何以100mph的速度调试服务器
  3. 【渝粤题库】国家开放大学2021春1021劳动与社会保障法题目
  4. CCNA-第六篇-静态路由+动态路由开头
  5. 浅谈-LINUX 操作系统启动过程
  6. 期权水平套利可行分析(20191204)[博]
  7. CCF NOI1139 高精度减法
  8. Python中定时任务框架APScheduler的快速入门指南
  9. 正确使用计算机键盘的方法是,电脑键盘指法练习及图示
  10. 阿里云 短信 sdk 导致strtotime时间戳转换错误 相差8小时
  11. 商用密码产品认证(型号)概述
  12. qt信号发送间隔短而槽耗时多_Qt 信号和槽机制详解
  13. matlab生成轨道不平顺谱程序,用于轨道不平顺复现试验的驱动试验谱生成方法
  14. Ethernet(以太网) 详解 MAC、MII、PHY
  15. eclipse 关闭英文拼写检查,关闭xml验证
  16. Debug和release版本区别 原码反码补码的转换及存储
  17. 【python-docx】长度单位(毫米、厘米、英尺、磅等)的表示和转换关系
  18. 巴贝奇计算机科学思想,计算机之父巴贝奇_图灵_计算机科学之父
  19. 202112-3 登机牌条码(50分)不知道错哪了
  20. C/C++语言的应用领域

热门文章

  1. 想知道图片转表格用什么软件?不妨试试这些软件
  2. Uniapp中调整web-view的高度、获取当前的web-view页面URL
  3. 苹果接盘曼联被辟谣/ 特斯拉FSD北美完全开放/ 马斯克脑机接口准备人体试验/ 微软收购暴雪遇阻…今日更多新鲜事在此...
  4. 信息收集之——子域信息
  5. ffmpeg老版本下载地址
  6. echarts地图省市区县名称显示位置调整
  7. 精选100个Python实战项目案例,送给缺乏实战经验的你
  8. 游戏项目如何快速实现多语言版本(国际化)--Egret篇
  9. vsftpd配置多用户登陆的方法
  10. gpt分区 linux 4k对齐,4K对齐选8,2048和4098扇区数有多大区别?实测告诉你