G = nx.Graph()
G.add_node('a') #单个添加
G.add_nodes_from(['b','c','d','e']) #多个
nx.add_cycle(G,['f','g','h','i']) #添加一个环
# print(G.nodes())
H = nx.path_graph(10) #返回由10个节点挨个连接的无向图,所有有九条边
G.add_nodes_from(H) #创建一个子图H加入G
# G.add_node(H) #直接将图作为节点
# print(G.nodes())
print('所有节点:',G.nodes())
print('所有节点个数',G.number_of_nodes())
nx.draw(G,with_labels=True)
plt.show()
输出:
所有节点: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 所有节点个数 19
删除节点
G.remove_node(1) G.remove_nodes_from(['b','c','d','e']) #删除集合中所有节点 nx.draw(G,with_labels=True) plt.show()
输出:
#添加边
F = nx.Graph() #创建无向图
F.add_edge(11,12) #添加一条边,11连12
#等价于
e = (13,14)
F.add_edge(*e)
H = nx.path_graph(10)
F.add_edges_from(H.edges()) #不能写作 F.add_edges_from(H)
print('图中所有的边:',F.edges()) #节点用nodes
print('图中所有边个数',F.number_of_edges())
nx.draw(F,with_labels=True,node_color='yellow',node_shape='s',font_color='blue') #节点设置正方形,标签为蓝色
plt.show()
输出:
图中所有的边: [(11, 12), (13, 14), (0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)] 图中所有边个数 11
其中对nx.draw()中参数讲解,可参考。
G = nx.DiGraph()
start = [1,3,5,7]
to = [2,4,6,8]
for j in range(len(start)):
G.add_edge(start[j],to[j])
nx.draw(G,with_labels=True)
plt.show()
输出:
G = nx.Graph()
start = [1,3,5,7]
to = [2,4,6,8]
value = [1,0.5,12,5]
for j in range(len(start)):
G.add_weighted_edges_from([(start[j],to[j],value[j])]) #边的起点,终点,权重
nx.draw(G,with_labels=True,pos=nx.circular_layout(G),width=[float(v['weight']) for (r,c,v) in G.edges(data=True)])
plt.show()
#这里将权重的大小,设置为边的粗细
输出:
G = nx.DiGraph()
start = [1,3,5,7]
to = [2,4,6,8]
value = [1,0.5,12,5]
for j in range(len(start)):
G.add_weighted_edges_from([(start[j],to[j],value[j])]) #边的起点,终点,权重
nx.draw(G,with_labels=True,pos=nx.circular_layout(G),width=[float(v['weight']) for (r,c,v) in G.edges(data=True)])
plt.show()
输出:
# 固定坐标绘图
x = [1,3,4,5,7,6]
y = [4,5,2,8,5,10]
pos = {i+1:[x[i],y[i]] for i in range(len(x))}
G = nx.Graph()
G.add_nodes_from(pos.keys())
for n,p in pos.items():
G._node[n]['pos'] = p
G.add_edges_from([(1,3),(1,5),(2,4),(3,6),(4,6)])
nx.draw(G,pos=pos,with_labels=True,font_size=8,node_size=150)
plt.show()
输出:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
# 添加对应的边和点
for i in range(1, 10):
G.add_node(i, desc=str(i)) # 结点名称不能为str,desc为标签即结点名称
G.add_edge(1, 2, name='6') # 添加边, 参数name为边权值
G.add_edge(1, 3, name='4')
G.add_edge(1, 4, name='5')
G.add_edge(2, 5, name='1')
G.add_edge(3, 5, name='1')
G.add_edge(4, 6, name='2')
G.add_edge(5, 7, name='9')
G.add_edge(5, 8, name='7')
G.add_edge(6, 8, name='4')
G.add_edge(7, 9, name='2')
G.add_edge(8, 9, name='4')
pos = [(1, 3), (1, 3), (2, 4), (2, 2), (2, 1), (3, 3), (4, 1), (5, 4), (5, 2), (6, 3)] # pos列表从第0位开始,但我定义是从结点1开始,这里令前两个坐标相同
# 按pos所定位置画出节点,无标签无权值
nx.draw_networkx(G, pos, with_labels=None)
# 画出标签
node_labels = nx.get_node_attributes(G, 'desc')
nx.draw_networkx_labels(G, pos, labels=node_labels)
# 画出边权值
edge_labels = nx.get_edge_attributes(G, 'name')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
plt.title('AOE_CPM', fontsize=10)
plt.show()
输出:
Networkx教程
固定坐标



