import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
# 示例的邻接矩阵
adjacency_matrix = np.array([
[0, 1, 1, 0],
[1, 0, 1, 1],
[1, 1, 0, 1],
[0, 1, 1, 0]
])
# 创建一个无向图
G = nx.Graph()
# 添加节点
num_nodes = len(adjacency_matrix)
G.add_nodes_from(range(num_nodes))
# 添加边
for i in range(num_nodes):
for j in range(i + 1, num_nodes):
if adjacency_matrix[i][j] == 1:
G.add_edge(i, j)
# 使用 circular_layout 布局算法
pos = nx.circular_layout(G)
node_labels = {0: 'A', 1: 'B', 2: 'C', 3: 'D'} # 这里假设节点名称为 A、B、C、D
# 绘制图形
nx.draw(G, pos, with_labels=True, labels=node_labels, node_color='skyblue', node_size=500, font_weight='bold', font_size=10)
plt.title('Graph from Adjacency Matrix')
plt.show()
import matplotlib.pyplot as plt
:导入 matplotlib
库中的绘图模块,并使用别名 plt
。
import networkx as nx
:导入 networkx
库,并使用别名 nx
。networkx
是一个用于创建、操作和研究复杂网络的 Python 库。
import numpy as np
:导入 numpy
库,并使用别名 np
。numpy
是 Python 中用于科学计算的一个核心库,提供了对多维数组和矩阵的支持。
adjacency_matrix = np.array([...])
:创建一个示例的邻接矩阵。这个邻接矩阵表示一个无向图的连接情况,其中元素的值为 1 表示节点之间有边相连,值为 0 表示没有边相连。
G = nx.Graph()
:创建一个空的无向图。
num_nodes = len(adjacency_matrix)
:计算邻接矩阵的大小,确定图中节点的数量。
G.add_nodes_from(range(num_nodes))
:向图中添加节点,节点的数量由 num_nodes
决定。
for i in range(num_nodes):
:遍历节点。
for j in range(i + 1, num_nodes):
:遍历节点,确保只考虑上三角部分,因为邻接矩阵是对称的。
if adjacency_matrix[i][j] == 1:
:检查邻接矩阵中节点是否相连。
G.add_edge(i, j)
:如果节点相连(邻接矩阵中值为 1),则在图中添加一条边连接这两个节点。
pos = nx.circular_layout(G)
:使用 networkx
中的 circular_layout()
布局算法,将节点放置在一个圆形上,以确定节点的位置信息。
nx.draw(G, pos, with_labels=True, node_color='skyblue', node_size=500, font_weight='bold', font_size=10)
:使用 networkx
的 draw()
函数绘制图形。pos
参数指定了节点的位置信息,with_labels=True
表示在节点上显示标签,node_color
设置节点的颜色,node_size
设置节点的大小,font_weight
设置标签的字体加粗程度,font_size
设置标签的字体大小。
plt.title('Graph from Adjacency Matrix')
:设置图形的标题。
plt.show()
:显示绘制的图形。
在代码中,如果直接指定节点的详细信息,比如节点标签、节点名称等。但在图形绘制的过程中,使用了 with_labels=True
参数,这告诉 nx.draw()
函数要在节点上显示标签,这个标签默认是节点的索引值。在这个例子中,已经指定了标签信息。