只需要修改num_node_list中的数字就可以,但是不能太复杂,要不然画不下
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
import random
def draw_net(num_node_list2):
num_node_list = [0]
num_node_list = num_node_list + (num_node_list2)
G = nx.DiGraph() # 使用DiGraph创建一个有向图G
num_sum = len(num_node_list)
node = [[random.randint(0, 9) for j in range(1)] for i in range(num_sum)]
temp_n = 1
for i in range(num_sum - 1):
temp_n = num_node_list[i] + temp_n
node[i] = np.arange(temp_n, temp_n + num_node_list[i + 1]).tolist()
for i in range(len(node) - 1):
for x in range(len(node[i])):
for y in range(len(node[i + 1])):
G.add_edge(node[i][x], node[i + 1][y])
pos = dict() # 计算每个节点的坐标pos
# 根据每一层的节点数量,将节点从中间,向两边分布
tt_num = 0
for i in range(len(node)):
for x in range(len(node[i])):
tt_num += 1
pos[tt_num] = (i, x - len(node[i]) / 2)
nx.draw(G, # 要绘制的图
pos,
with_labels=True, # 绘制节点的名称
node_color='white', # 节点的颜色
edgecolors='black', # 边的颜色
linewidths=3, # 节点的粗细
width=2, # 边的粗细
node_size=1000 # 节点的大小
)
plt.show() # 使用show方法显示图形
if __name__ == "__main__":
num_node_list = [4, 10, 10, 4, 1]
draw_net(num_node_list)