Python 使用Matplotlib可视化由NetworkX生成的图形

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")

程序的初始阶段涉及导入必要的模块,networkxmatplotlib.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

# 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()

输出

Python 使用Matplotlib可视化由NetworkX生成的图形

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

现在是为我们的图添加节点的时候了。为了将个别节点添加到图中,我们利用add_node()函数。每个节点都有一个唯一的标识符,我们还可以通过使用自定义属性给节点赋予标签。例如,在这个例子中,我们将节点1标记为’A’,节点2标记为’B’,节点3标记为’C’,节点4标记为’D’。

当我们添加了节点后,我们将生成用于连接节点的边。为了在节点之间添加边,我们使用add_edge()函数。例如,节点1和2通过一条权重为4的边连接在一起。

为了看到图形,我们首先需要将节点定位。为了自动计算节点的位置,我们使用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

# 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()

输出

Python 使用Matplotlib可视化由NetworkX生成的图形

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

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

为了组织可视化,我们使用Matplotlib的subplots()方法来构造子图。我们指定子图的行数和列数(在这种情况下为一行两列),以及图形的大小。

这样可以将绘图区域分成多个部分,以显示不同的图形。

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

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

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

结论

通过这些,我们了解了这些主题。我们成功地创建了一个图形,设置了子图,并使用NetworkX和Matplotlib对图形进行了可视化。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程