【Graph】NetworkX官方基础教程:图的生成与相关操作

news2024/11/17 7:54:55

NetworkX官方基础教程:图的生成与相关操作

  • 1. Graph生成和graph操作
  • 2. 分析图
  • 3. 画图
  • 参考资料

本文作为对图结构和复杂网络的快速上手,内容包括基于NetworkX进行图的生成与相关操作,Graph的分析以及绘制Graphs。
NetworkX官方基础教程

1. Graph生成和graph操作

可以指定使用一个nbunch报告所有节点的子集的边和度。nbunch是以下任何一种:None(表示所有节点)、节点或本身不是图中节点的节点的一个可迭代容器。

除了逐节点或逐边构造图之外,它们还可以通过以下方法生成:

  1. 应用经典的graph操作,例如:

    • subgraph(G, nbunch) : 返回在nbunch中的节点上导出的子图
    • union(G, H[, rename]) :组合图G和图H
    • disjoint_union(G, H) :组合图G和图H
    • cartesian_product(G, H) :返回图G和图H的笛卡儿积
    • compose(G, H) :通过将节点和边组合成一个单一的图来组合图G和图H
    • complement(G) :返回图G的补图
    • create_empty_copy(G[, with_data]) :返回图G的一个副本,其中移除了所有的边
    • to_undirected(graph) :返回图graph的无向视图
    • to_directed(graph) :返回图graph的有向视图
  2. 使用对典型的小尺度图的调用,例如:

    • petersen_graph([create_using]) :返回 Petersen 图。
    • tutte_graph([create_using]) : 返回 Tutte 图。
    • sedgewick_maze_graph([create_using]) :用一个循环返回一个小maze图。
    • tetrahedral_graph([create_using]) :返回3-正则柏拉图四面体图
  3. 为经典图使用一个(构造性的)生成器,例如:

    • complete_graph(n[, create_using]) : 返回具有 n 个节点的完整图K_n
    • complete_bipartite_graph(n1, n2[, create_using]) : 返回完全二分图K_{n_1,n_2}
    • barbell_graph(m1, m2[, create_using]) : 返回杠铃图: 两个完整的图由一个路径连接。
    • lollipop_graph(m, n[, create_using]) : 返回棒棒糖图; K_m连接到P_n。

例如:

import networkx as nx
from networkx.generators.classic import lollipop_graph
K_5 = nx.complete_graph(5)
K_3_5 = nx.complete_bipartite_graph(3, 5)
barbell = nx.barbell_graph(10, 10)
lollipop = nx.lollipop_graph(10, 20)
  1. 使用随机图生成器, 例如
    • erdos_renyi_graph(n, p[, seed, directed]) : 返回一个 G n , P G_{n,P} GnP随机图,也称为Erdős-Rényi图或二项图。
    • watts_strogatz_graph(n, k, p[, seed]) :返回 Watts-Strogatz 小世界图。
    • barabasi_albert_graph(n, m[, seed, …]) : 使用 Barabási-Albert 优先附件返回一个随机图
    • random_lobster(n, p1, p2[, seed]) : 返回一个随机龙虾图。

例如:

er = nx.erdos_renyi_graph(100, 0.15)
ws = nx.watts_strogatz_graph(30, 3, 0.1)
ba = nx.barabasi_albert_graph(100, 5)
red = nx.random_lobster(100, 0.9, 0.9)
  1. 使用通用图形格式读取存储在文件中的图形
    NetworkX 支持许多流行的格式,例如边列表、邻接列表、 GML、 GraphML、 LEDA 等。
nx.write_gml(red, "path.to.file")
mygraph = nx.read_gml("path.to.file")

2. 分析图

图G的结构可以用各种图论函数来分析,例如:
分析图
一些具有大输出的函数遍历(节点,值)2-元组。如果需要,可以很容易地将它们存储在 dict 结构中。
dict存储图结构

3. 画图

NetworkX 主要不是一个图形绘制软件包,而是基于Matplotlib的基本绘制,以及一个使用开源 Graphviz 软件包的界面。这些都是 networkx.uring模块的一部分,如果可能的话将导入它们。

首先导入 Matplotlib 的 plot 接口(pylab 也可以工作):

import matplotlib.pyplot as plt

为了测试导入 nx_ pylab 是否成功,使用:
画图
当绘制到交互式显示时。请注意,可能需要发出Matplotlib

plt.show()  

如果在交互模式下不使用matplotlib,则使用。

options = {
    'node_color': 'black',
    'node_size': 100,
    'width': 3,
}
subax1 = plt.subplot(221)
nx.draw_random(G, **options)
subax2 = plt.subplot(222)
nx.draw_circular(G, **options)
subax3 = plt.subplot(223)
nx.draw_spectral(G, **options)
subax4 = plt.subplot(224)
nx.draw_shell(G, nlist=[range(5,10), range(5)], **options)

绘图
可以通过draw_networkx()找到其他选项,通过布局模块找到布局。 可以将多个shellsdraw_shell() 一起使用。

G = nx.dodecahedral_graph()
shells = [[2, 3, 4, 5, 6], [8, 1, 0, 19, 18, 17, 16, 15, 14, 7], [9, 10, 11, 12, 13]]
nx.draw_shell(G, nlist=shells, **options)

绘图
若要将绘图保存到文件中,请使用:

nx.draw(G)
plt.savefig("path.png")

此函数写入本地目录中的文件 path.png。 如果 Graphviz 和 PyGraphviz 或 pydot 可用,还可以使用 networkx.drawing.nx_agraph.graphviz_layout networkx.drawing.nx_pydot.graphviz_layout 来获取节点位置,或以dot格式编写图以进行进一步处理。

from networkx.drawing.nx_pydot import write_dot
pos = nx.nx_agraph.graphviz_layout(G)
nx.draw(G, pos=pos)
write_dot(G, 'file.dot')

参考资料

[1] NetworkX Tutorial
[2] https://networkx.org/documentation/stable/reference/introduction.html

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

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

相关文章

Mapper代理开发

1、定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下。 在Resources下新建层级包需要用分隔符 / 2、设置SQL映射文件的namespace属性为UserMapper接口全限定名 全限定类名就是类名全称,带包路径的用点隔开&#xff…

Python从入门到入土的90行代码

文章目录基础入门菜鸟提升基础晋级高手之路内置包库奇技淫巧基础入门 1 python 即在命令行输入python,进入Python的开发环境。 2 x 12*3-4/56**2 加减乘除四则混合运算,可当作计算器使用,其中**表示乘方。 3 print(x) 即输出x的值&#x…

毕业设计:基于汇编实现的欢乐QQ堂小游戏 附完整代码

本次实现制作了汇编版的QQ堂,使用了VGA 320x200 256色视频显示, FAT12文件系统、时钟中断,nasm + gcc联合编译,通过端口设置调色板。其中除了AI,游戏界面、逻辑等均由汇编实现。游戏具有良好的图形界面,流畅的操作性,令人愉快的玩法,并且有AI与你作战。 首先展示游戏的开…

npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。

npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。解决方法方法一:以管理员身份运行方法二:查看npm环境变量配置方法一&#xf…

3.1.4 构造函数及构造代码块

文章目录1.概念2.形式3.练习4.关于构造函数的总结5.构造代码块与局部代码块5.1 形式5.2 构造代码块的特点5.3 局部代码块5.4 练习5.5 静态/构造/局部代码块的比较1.概念 构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法 构造方法的主要功能就是完成对象创建…

如何在android开发中使用Kotlin Flow(一)

Kotlin 的Flow可以对数据流进行建模,类似LiveData、RxJava的数据流。 Flow也是用观察者模式实现的。 观察者模式包括了可观察对象(Observable,生产者、发射者、源这些称呼都是指可观察对象,可以被观察)、观察对象&…

如何安装谷歌服务框架?(Google三件套下载教程)

谷歌服务框架,想必大家已经了解过了,都知道是个什么东西。这里我在赘述一下,谷歌服务框架是支持谷歌应用商店(Google Play)正常运行的服务框架,没有它,谷歌商店无法正常在安卓手机上运行&#x…

计算机图形学 第6章 三维变换与投影

目录 # 学习要求 前置知识 三维几何变换总的式子: 平移变换 比例变换 旋转变换:绕x轴旋转 反射变换 错切变换 三维复合变换 坐标系变换 正交投影矩阵 三视图 斜投影定义 透视投影 透视变换坐标系 ## 代码 透视投影分类 # 学习要求 …

怎么把图片做成gif动图?三步搞定gif在线制作

在日常办公、生活中经常会使用一些gif动态图片,生动有趣画面丰富。很好奇这些gif动图是怎么制作的吧!其实,制作gif表情包的方法很简单,给大家分享几个简单实用的gif制作(https://www.gif.cn/)方法&#xff…

ccflow 代码——流程讲义

爬虫组件分析目录概述需求:设计思路实现思路分析1.表单引擎模版表系统框架Jflow 对使用者的要求参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,…

CV——day71 零基础学YOLO:YOLOv2

YOLOv25. YOLOv25.1 YOLOv2升级概述5.2 YOLOv2网络架构5.3 基于聚类提取先验框5.4 偏移量计算方法5.5 坐标映射与还原5.6 感受野的作用5.7 特征融合改进5.7.1 多尺度检测5.8 YOLOv2 总结5. YOLOv2 5.1 YOLOv2升级概述 可以看出,v2的map相比v1改进了很多&#xff0c…

KafkaProducer线程安全吗?

这是我今天面试被问的一个问题&#xff0c;这会回来就来看看源码 先看KafkaProducer的构造函数 public KafkaProducer(Map<String, Object> configs) { this((ProducerConfig)(new ProducerConfig(configs)), (Serializer)null, (Serializer)null); } public KafkaPro…

[MRCTF2020]PixelShooter1题解

Android一词最早出现于法国作家利尔亚当&#xff08;Auguste Villiers de lIsle-Adam&#xff09;在1886年发表的科幻小数《未来的夏娃》&#xff08;Lve future&#xff09;中。他将外表像人的机器起名为Android。 本题是一个安卓逆向 1.下载到手机玩一玩 是一个32位文件下载…

2-JVM、JRE、JDK的作用及联系和区别

在Java环境配置和项目启动中&#xff0c;这三者的配置是项目启动的基础保证。 JVM(Java Virtual Machine)&#xff0c;Java虚拟机&#xff0c;就是一个虚拟的用于解析bytecode字节码的”虚拟计算机”。一般与OS操作系统打交道。是整个java实现跨平台的最核心的部分【使用Java编…

GlobalPointer:用统一的方式处理嵌套和非嵌套NER

本文将介绍一个称为GlobalPointer的设计&#xff0c;它利用全局归一化的思路来进行命名实体识别&#xff08;NER&#xff09;&#xff0c;可以无差别地识别嵌套实体和非嵌套实体&#xff0c;在非嵌套&#xff08;Flat NER&#xff09;的情形下它能取得媲美CRF的效果&#xff0c…

大数据专业前景怎么样?

大数据专业毕业生未来的岗位选择空间比较大&#xff0c;有三大类岗位可选择分别是大数据开发岗位、大数据分析岗位和大数据运维岗位&#xff0c;在不同的行业和技术体系结构下这些岗位也包含很多细分的岗位。 大数据开发岗位分为平台研发岗位和行业场景开发岗位两大类&#xf…

latex自己记录需要的

参考:LaTeX 公式篇 推荐网站&#xff1a;LaTeX公式编辑器&#xff0c;有模板 换行 $$ \begin{array}{c} 1\\ 2\\ 3\\ \end{array} $$123\begin{array}{c} 1\\ 2\\ 3\\ \end{array} 123​ 公式拆分 $$ \begin{split} 123 & 33 \\ &6 \end{split} $$123336\begin{split}…

找工作不用愁,送你一份Salesforce面试秘籍!

在之前的文章中&#xff0c;自由侠部落为学习者梳理了Salesforce架构师的面试秘籍&#xff0c;将其拆解为了3个方面——分享工作经验、展示技术知识以及证明领导能力&#xff0c;上篇文章已经展示了工作经验部分&#xff0c;接下来将继续分享面试秘籍&#xff0c;帮助求职者顺利…

linux内核之netlink通信

Linux内核(04)之netlink通信 Author&#xff1a;Onceday Date&#xff1a;2023年1月3日 漫漫长路&#xff0c;才刚刚开始… 参考文档&#xff1a; netlink 机制 binarydady 阿里云开发者社区linux中通用Netlink详解及使用剖析 binarydady 阿里云开发者社区RFC 3549 Linux N…

测试员最不愿遇到的18个测试问题,怎么解决?

测试员最不愿遇到的18个测试问题&#xff0c;怎么解决&#xff1f; 目录&#xff1a;导读 测试员最不愿遇到的18个测试问题&#xff0c;怎么解决&#xff1f; 一 测试充分度&#xff08;Test Sufficiency&#xff09; 二 测试有效性&#xff08;Test Effectiveness&#x…