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()
函数要在节点上显示标签,这个标签默认是节点的索引值。在这个例子中,已经指定了标签信息。