小书匠Graph图论

研究中经常涉及到图论的相关知识,而且常常面对某些术语时,根本不知道在说什么.前不久接触了NetworkX这个graph处理工具,发现这个工具已经解决绝大部分的图论问题(也许只是我自己认为的,没有证据证明),所以把这个工具的使用学习下,顺便学习图论的相关知识.

NetworkX本来是有官方文档的,花时间去学也是可以的,我这里把认为重要的整理出来.这些内容会分几次发布,做成一个系列使用教程.

系统环境:

linuxmint 18.3
python 3.5.2
numpy 1.14.3
matplotlib 1.5.1
networkx 2.1

全文注意事项:

1.为了方便,graph我有时候会称为,这时候不要将这个和图片混淆了.
2.代码中会频繁使用G.clear(),这是在画新的graph之前,先清空原先的graph
3.matplotlib包不能显示平行边,自循环这类的边,所以需要借助pydot包来显示,不过一般使用matplotlib来显示


目录:

  • 1.创建一个Graph

    • 1.1导入相应包,定义graph
    • 1.2有自循环的无向图
    • 1.3有自循环的有向图
    • 1.4有自循环和平行边的无向图
    • 1.5有自循环和平行边的有向图

1.创建一个Graph

例子:
下面涉及的graph如果不是特别需要,我将使用图1这个手动创建的graph,这个graph有双向边,有孤岛节点,有平行边,有自循环

图1 例子图

1.1导入相应包,定义graph

  1. #导入相应的包


  2. import networkx as nx 

  3. from PIL import Image 

  4. import matplotlib.pyplot as plt 

  5. from networkx.drawing.nx_pydot import to_pydot 

  6. from matplotlib.font_manager import *  


  7. #定义自定义字体,文件名从1.b查看系统中文字体中来,这是Linux字体路径,windows系统的字体路径自查 

  8. myfont = FontProperties(fname='/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc')  

  9. #解决负号'-'显示为方块的问题  

  10. matplotlib.rcParams['axes.unicode_minus']=False  


  11. #定义图的节点和边 

  12. nodes=['0','1','2','3','4','5','a','b','c'] 

  13. edges=[('0','0',1),('0','1',1),('0','5',1),('0','5',2),('1','2',3),('1','4',5),('2','1',7),('2','4',6),('a','b',0.5),('b','c',0.5),('c','a',0.5)] 


  14. #用于显示图片 

  15. def ShowGraph(G): 

  16. #使用pydot保存图片 

  17. P=to_pydot(G)  

  18. P.write_jpeg('pydot.png') 


  19. #使用matplotlib保存图片 

  20. pos=nx.shell_layout(G) 

  21. nx.draw(G,pos,with_labels=True) 

  22. plt.savefig('mat.png') 

  23. plt.close()  


  24. #将前面两张图显示 

  25. plt.subplots(figsize=(12,6)) 

  26. #plt.suptitle('Diffrent') 

  27. #载入matplotlib的图片 

  28. plt.subplot(1,2,1) 

  29. plt.title('matplotlib') 

  30. plt.imshow(Image.open('mat.png')) 

  31. #plt.axis('off') 

  32. #去掉坐标刻度 

  33. plt.xticks([]) 

  34. plt.yticks([]) 


  35. #载入pydot的图片 

  36. plt.subplot(1,2,2) 

  37. plt.title('pydot') 

  38. plt.imshow(Image.open('pydot.png')) 

  39. #plt.axis('off') 

  40. #去掉坐标刻度 

  41. plt.xticks([]) 

  42. plt.yticks([]) 


  43. #显示图片 

  44. plt.show()  

1.2有自循环的无向图

  1. #定义无向图


  2. G = nx.Graph() 


  3. #往图添加节点和边 

  4. G.add_nodes_from(nodes) 

  5. G.add_weighted_edges_from(edges) 


  6. #显示图片 

  7. ShowGraph(G) 

有自循环的无向图

1.3有自循环的有向图

  1. #清除前面的无向图


  2. G.clear() 


  3. #定义有向图 

  4. G = nx.DiGraph() 

  5. #添加节点和边 

  6. G.add_nodes_from(nodes) 

  7. G.add_weighted_edges_from(edges) 


  8. #显示图片 

  9. ShowGraph(G) 

有自循环的有向图

1.4有自循环和平行边的无向图

  1. #清除前面的无向图


  2. G.clear() 


  3. #定义带平行边无向图 

  4. G = nx.MultiGraph() 

  5. #添加节点和边 

  6. G.add_nodes_from(nodes) 

  7. G.add_weighted_edges_from(edges) 


  8. #显示图片 

  9. ShowGraph(G) 

有自循环和平行边的无向图

1.5有自循环和平行边的有向图

  1. #清除前面的无向图


  2. G.clear() 


  3. #定义带平行边有向图 

  4. G = nx.MultiDiGraph() 

  5. #添加节点和边 

  6. G.add_nodes_from(nodes) 

  7. G.add_weighted_edges_from(edges) 


  8. #显示图片 

  9. ShowGraph(G) 

有自循环和平行边的有向图

转载于:https://www.cnblogs.com/wushaogui/p/9199726.html

NetworkX系列教程(1)-创建graph相关推荐

  1. stm32cubemx生成不了keil工程文件_STM32CubeMX系列教程03_创建并生成代码工程

    说明: 本文原创作者『strongerHuang』 首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:EmbeddedDevelop 标签:STM32. STM32CubeMX. LL库. H ...

  2. maven web项目导入sts_Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有 ...

  3. NetworkX系列教程(2)-graph生成器

    小书匠Graph图论 本节主要讲解如何快速使用内置的方法生成graph,官方的文档在这里,里面包含了networkX的所有graph生成器,下面的内容只是我节选的内容,并将graph画出来而已. 声明 ...

  4. NetworkX系列教程(10)-算法之三:关键路径问题

    小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...

  5. 涂鸦Zigbee SDK开发系列教程——1.创建产品

    使用涂鸦模组进行产品开发主要有三种不同的方式: 零代码开发:涂鸦提供可视化功能配置界面,无需任何编程经验,只需在线配置好产品的功能,即可完成固件开发,快速完成产品智能化. MCU SDK开发:在 MC ...

  6. freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker

    今天来聊聊 Spring Boot 整合 Freemarker. Freemarker 简介 这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML ...

  7. keil如何添加h文件_【专栏】Keil系列教程

    置顶/星标公众号,不错过每一条重要消息! 本教程由作者strongerHuang原创发布. 版权所有:禁止商用 申明:该文档仅供个人学习使用,转载请公众号联系作者授权. 该系列教程结合MDK-ARM整 ...

  8. docker 打包镜像_Spring Boot2 系列教程(四十一)部署 Spring Boot 到远程 Docker 容器

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...

  9. 【Python3.6+Django2.0+Xadmin2.0系列教程之一(入门篇-上)】环境搭建及项目创建

    由于工作需要,接触了大半年时间的Django+xadmin框架,一直没空对这块对进行相关的梳理.最近在同事的怂恿下,就在这分享下笔者的学习及工作经验吧. 好了,话不多说,下面开始进入正题: 转载请注明 ...

最新文章

  1. sql 关联使用id还是code_使用sh格式化nginx访问日志并存入mysql
  2. 大数据驱动下的微博社会化推荐
  3. Spring Boot自定义缓存注解
  4. android 入门-android自定义控件
  5. pat 乙级 1004 成绩排名(C++)
  6. 再添一所!华中科技大学成立人工智能与自动化学院
  7. python入门--斐波那契数列
  8. centos7下扩充swap空间
  9. 电商项目的app学习笔记(三)-嵌套路由组件的实现
  10. 1核2g服务器能干什么_国内哪个云服务器比较便宜性价比高?大家有什么好推荐...
  11. 当自动化测试遇到邮箱
  12. 测井曲线绘图显示算法总结——双缓冲技术
  13. 2019/11/08 校内模拟
  14. 计算机窗口闪屏,电脑闪屏怎么办?如何解决电脑经常闪屏问题
  15. QCon-小布助手对话系统工程实践
  16. constructor构造函数(React)
  17. input的button类型,点击页面跳转
  18. 谷歌海外推广怎么做?
  19. 本科计算机 出国可以学营养学吗,美国营养学专业哪些大学比较好 十所美国营养...
  20. 【HCIA-cloud】【4】服务器虚拟化之存储资源管理:存储资源类型说明、存储配置模式说明【普通、精简、延迟置零】、虚拟机磁盘类型说明、FusionCompute中操作添加存储

热门文章

  1. c++名字查找和作用域的一个例子的感想
  2. CentOS 7.6 安装 Mysql8.0.17 rpm-bundle.tar解包 rpm安装(个人未验证)
  3. 手机壳鸿蒙,手机壳黑榜发布 真相太惊人!
  4. [BUUCTF-pwn]——ciscn_2019_n_8
  5. hough变换检测圆周_【视觉】视觉检测人应该了解的缺陷检测方法
  6. 償債基金(Sinking fund)
  7. log4j中用变量配置日志输出文件位置
  8. .Net Core Nuget还原失败
  9. 迅为I.MX6Q开发板配不同分辨率不同尺寸液晶屏幕
  10. javabean自定义组件