Python - 使用 Matplotlib 可视化 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()'函数调用用于显示构建的图。根据运行脚本的条件。
最终,程序将图表存储为名为"filename.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 # 创建图形 G = nx.Graph() # 添加节点 G.add_node(1, label='A') G.add_node(2, label='B') G.add_node(3, label='C') G.add_node(4, label='D') # 添加边 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) # 设置节点位置 pos = nx.spring_layout(G) # 绘制节点和标签 nx.draw_networkx_nodes(G, pos) nx.draw_networkx_labels(G, pos, labels=nx.get_node_attributes(G, 'label')) # 绘制带权重的边 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) # 显示图形 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 和我们之前计算的位置 pos。这可确保节点和标签显示在正确的位置。
为了可视化边缘,我们还使用 draw_networkx_edges() 函数绘制它们。此外,我们使用 draw_networkx_edge_labels() 函数包含边缘权重。此函数将边缘权重作为标签添加到相应边缘附近。
最后,我们使用 plt.show() 显示图形图。这将打开一个窗口或在 Jupyter Notebook 界面中显示该图。为了使图看起来更清晰并专注于图形本身,我们使用 plt.axis('off') 关闭轴的可见性。
方法 2:使用子图可视化大型图形
示例
import networkx as nx import matplotlib.pyplot as plt # 创建图表 G = nx.path_graph(5) # 创建子图 fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10, 5)) # 绘制原始图表 axs[0].set_title('Original Graph') nx.draw(G, ax=axs[0]) # 绘制修改后的图表 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 对图表进行可视化。