首页 > 编程语言 >Python - 使用 Matplotlib 可视化在 NetworkX 中生成的图形

Python - 使用 Matplotlib 可视化在 NetworkX 中生成的图形

时间:2023-07-30 21:55:42浏览次数:43  
标签:draw networkx Python Matplotlib nx 可视化 NetworkX 图形 节点

介绍

Python代表了一种灵活的编码语言,以其易用性和清晰性而闻名。这提供了许多库和组件,用于简化不同的任务,包括创建图形和显示。NetworkX 代表了一个高效的 Python 工具包,用于构建、更改和研究复杂网络的排列、移动和操作。然而,Matplotlib是一个流行的工具包,用于在Python中创建静态,动画和交互式可视化。

定义

NetworkX 作为一个 Python 库,用于构建、修改和研究复杂网络的排列、移动和功能。这提供了多种功能和数学公式来生成各种图形表示。这包括定向和非定向网络、多合字母和两部分图。

Matplotlib提供了广泛的功能来使用Python生成静态,动态和交互式绘图。这为可视化数据提供了许多信息,例如折线图、散点图、条形图、直方图等。

语法

import networkx as nx import matplotlib.pyplot as plt G = nx.Graph() G.add_edge(1, 2) G.add_edge(2, 3) nx.draw(G) plt.show() plt.savefig("filename.png")

该程序的初始阶段需要导入基本模块,“networkx”和“matplotlib.pyplot”。然后,使用“networkx”库中的“Graph()”子例程创建一个空白的图形变量“G”。

为了定义图表的布局,通过“add_edge()”函数放置两条连接线。

一旦定义完成,图的结构就是这样,程序就会继续使用“networkx”框架中的“draw()”函数可视化图。“draw()” 方法接收图形 'G' 作为变量,并生成网络的可视输出。默认情况下,函数 'draw()' 采用弹簧放置算法来放置元素。它显示了具有预设视觉特征的绘图。

来自库 'matplotlib.pyplot' 的 'show()' 函数调用用于显示构建的图。根据运行脚本的条件。

最终,程序将图表存储为名为“文件名.png”的图片文件。它采用来自 'matplotlib.pyplot' 框架的 'savefig()' 过程。此功能使用户能够定义文件名和格式(如 PNG、JPEG、PDF)来存储绘图。在这种情况下,图表将保留为 PNG 格式的图片,标题为“filetitle.png”。文档将保存在相同的文件夹中,就像 Python 脚本或笔记本一样。

算法

  • 第 1 步:导入所需的库:networkx 和 matplotlib.pyplot。

  • 第 2 步:使用 NetworkX 生成图形。

  • 第 3 步:使用 Matplotlib 绘制图形。

  • 第 4 步:将图形的绘图保存在文件中。

  • 步骤5:显示图形的绘图。

方法

  • 方法 1:使用节点标签和边缘权重可视化图形

  • 方法 2:使用子图可视化大型图形

方法 1:使用节点标签和边缘权重可视化图形

import networkx as nx import matplotlib.pyplot as plt # Create graph G = nx.Graph() # Add nodes G.add_node(1, label='A') G.add_node(2, label='B') G.add_node(3, label='C') G.add_node(4, label='D') # Add edges G.add_edge(1, 2, weight=4) G.add_edge(2, 3, weight=7) G.add_edge(3, 1, weight=2) G.add_edge(1, 4, weight=5) # Set node positions pos = nx.spring_layout(G) # Draw nodes and labels nx.draw_networkx_nodes(G, pos) nx.draw_networkx_labels(G, pos, labels=nx.get_node_attributes(G, 'label')) # Draw edges with weights edge_labels = nx.get_edge_attributes(G, 'weight') nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels) nx.draw_networkx_edges(G, pos) # Show graph plt.axis('off') plt.show()

输出

我们使用 NetworkX 中的 Graph() 函数创建一个名为 G 的空图形对象。

现在是时候用节点填充我们的图形了。为了将单个节点添加到图中,我们使用 add_node() 函数。每个节点都有一个唯一的标识,我们还可以通过使用自定义属性为节点提供标签。在此示例中,我们将节点 1 标记为“A”,将节点 2 标记为“B”,将节点 3 标记为“C”,将节点 4 标记为“D”。

添加节点后,我们将开发边来连接节点。为了在节点之间添加边,我们利用 add_edge() 函数。例如,节点 1 和节点 2 通过四加权边连接。

要查看图表,我们必须首先定位节点。为了自动计算节点的位置,我们使用NetworkX的spring_layout()方法。此函数应用一种算法,该算法试图以美观的方式排列节点。

现在到了令人兴奋的部分 - 可视化图形!我们使用各种NetworkX函数和Matplotlib来创建绘图。我们首先使用 draw_networkx_nodes() 绘制节点,使用 draw_networkx_labels() 绘制标签。我们传入图形对象 G 和我们之前计算的位置位置。这可确保节点和标签显示在正确的位置。

为了可视化边缘,我们还使用 draw_networkx_edges() 函数绘制它们。此外,我们还使用 draw_networkx_edge_labels() 函数包含边缘权重。此函数将边权重添加为相应边附近的标签。

最后,我们使用 plt.show() 显示图形图。这将打开一个窗口或在 Jupyter 笔记本界面中显示绘图。为了使绘图看起来更干净并专注于图形本身,我们使用 plt.axis('off') 来关闭轴的可见性。

方法 2:使用子图可视化大型图形

import networkx as nx import matplotlib.pyplot as plt # Create graph G = nx.path_graph(5) # Create subplots fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10, 5)) # Plot original graph axs[0].set_title('Original Graph') nx.draw(G, ax=axs[0]) # Plot modified graph axs[1].set_title('Modified Graph') pos = nx.spring_layout(G) nx.draw(G, pos=pos, ax=axs[1], node_color='r', node_size=500, with_labels=False) plt.suptitle('Visualization of Large Graph with Subplots') plt.show()

输出

首先,我们导入必要的库:NetworkX 和 Matplotlib.pyplot。这些库为我们提供了创建和可视化图形的功能和工具。

接下来,我们使用 NetworkX 中的 path_graph() 函数创建一个名为 G 的图形对象。此函数生成一个简单的路径图,其中包含 5 个以线性方式连接的节点。

为了组织可视化,我们使用 Matplotlib 的 subplots() 方法来构建子图。我们指示子图行数和列数(在本例中为一行和两列)以及图形大小。

这有助于我们将绘图区域划分为多个部分以显示不同的图形。

现在,是时候在第一个子图上绘制原始图形了。我们使用索引 0 访问第一个子图,并使用 set_title() 函数设置其标题。然后,我们使用 NetworkX 中的 draw() 函数在此子图上可视化原始图形。

转到第二个子图,我们重复该过程。我们设置它的标题并使用索引 1 访问它。我们还使用 NetworkX 的 spring_layout() 函数计算节点位置,该函数以美观的方式排列节点。然后,我们再次使用 draw() 函数在此子图上可视化修改后的图形。在这里,我们可以自定义节点颜色、大小和标签,以将其与原始图形区分开来。

为了增强整体呈现效果,我们使用 Matplotlib 的 suptitle() 函数为整个图形添加一个通用标题。

结论

通过这种方式,我们正确地了解了这些主题。我们已经成功地创建了一个图形,设置了子图,并使用NetworkX和Matplotlib可视化了图形。

标签:draw,networkx,Python,Matplotlib,nx,可视化,NetworkX,图形,节点
From: https://www.cnblogs.com/10zhan/p/17592126.html

相关文章

  • python数据分析师入门-学习笔记(爬虫-序言)
    爬虫到底是什么概括爬虫是批量化自动获取既有数据批量化自动既有数据通常获取既有数据特殊批量注册一批账号批量去领取优惠券批量自动下单购物自动做任务(签到)实际应用企业中:竞品调研数据采集办公自动化个人:比如看小说有的网站收费有的网站不收费......
  • python爬虫基础
    前言都说爬虫简介1、首先我们需要知道爬虫是什么?爬虫实际上是一段程序,我们可以通过这段程序从互联网上获取到我们想要的数据,这里还有另外一种解释是我们使用程序来模拟浏览器向服务器发送请求,来获取响应信息2、爬虫的核心:(1)、爬取网页:爬取整个网页,包含网页中的所有内容(2)、解......
  • opencv-python 卷积操作
    1图像卷积图像卷积就是卷积核在图像上按行滑动遍历像素时不断的相乘求和的过程,卷积可以用来提取特征,去噪,平滑等。如下图: ......
  • opencv-python霍夫变换
    1霍夫线检测原理霍夫变换常用来提取图像中的直线和圆等几何形状。在笛卡尔坐标系中,直线可以表示为y=kx+q 也就是说通过变量k,q可以确定一条直线,把直线写成关于k,q的函数,进行空间转换,转换后的空间称为霍夫空间。也就是说:笛卡尔坐标系中的一条线对应了霍夫空间的一个点。反过......
  • python argparse—用于命令行选项、参数和子命令的解析器
    参考:https://docs.python.org/3/library/argparse.htmlargparse.ArgumentParser:创建Parser对象语法格式class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-......
  • python的内置方法
     类型判断issubclass首先,我们先看issubclass()这个内置函数可以帮我们判断x类是否是y类型的子类classBase:passclassFoo(Base):passclassBar(Foo):passprint(issubclass(Bar,Foo))#Trueprint(issubclass(Foo,Bar))#False......
  • Python报错 | xlrd.biffh.XLRDError Excel xlsx file; not supported
    报错信息Python加载xlsx文件时,遇到:xlrd.biffh.XLRDErrorExcelxlsxfile;notsupported错误原因报错翻译过来是:xlrd.biffh.xlrd错误:Excelxlsx文件;不受支持解决方案方法1:安装指定低版本的xlrd,执行下面的pip安装命令即可:pipinstallxlrd==1.2.0方法2:Excel另存为......
  • python数据分析师入门-学习笔记(第十节 数据获取)
    工具使用Anaconda官网下载安装一路next(默认就行)Chrome默认安装就行打开jupyternotebook打开anacondaprompt输入jupyternotebook系统自动打开一个网页快手掌握开发工具模式:代码模式markdown模式快捷键h查看所有快捷键esc编辑状态切换......
  • python数据分析师入门-学习笔记(第九节 爬虫的核心流程)
    学习链接:Python数据分析师入门爬虫的核心流程明确目标汽车成交量汽车评论信息汽车提车分享信息搜寻哪些网站或APP有我们要的资源汽车之家懂车帝易车分析数据所在位置,加载方式直接加载的额外的网络请求数据获取使用代码驱动APP或浏览器自己分析请求......
  • python数据分析师入门-学习笔记(第八节 python爬虫的准备工作)
    学习链接:Python数据分析师入门python爬虫的准备工作一台电脑尽量windows电脑语言环境编程语言爬虫并不是python独有Python开发环境Anaconda了解爬虫的实现和原理用代码去控制终端用代码直接发送请求CS(客户端服务器)/BS(浏览器服务器)模型CS/BS浏览......