You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

绘制带颜色节点的图:如何使无着色与着色图布局一致?

解决NetworkX两次绘图布局不一致的问题

NetworkX每次调用nx.draw_networkx()时,默认会随机生成节点的布局位置,这就是两次图布局不同的原因。要让无着色图和着色图布局完全一致,只需要提前计算一次布局位置,然后两次绘图都复用这个位置参数即可。

修改后的代码如下:

G=[1,0,0,0,1,0,0,1,1,1] # 定义图(邻接矩阵的右上半三角)
#-----------
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
import random

l=len(G)
import math
nNodes=round(1/2 +math.sqrt(2*l+1/2))

adjMatrix=np.zeros((nNodes, nNodes))
ij=0
for i in range(nNodes):
    for j in range(i+1,nNodes):
      adjMatrix[i][j]=G[ij]
      ij=ij+1
    
# 从邻接矩阵创建图
Gdraw = nx.from_numpy_matrix(adjMatrix)

# 提前计算节点布局(使用默认的spring布局,也可替换为circular_layout等)
pos = nx.spring_layout(Gdraw)

# 绘制无着色图,指定布局pos
nx.draw_networkx(Gdraw, pos=pos, with_labels=True, node_color='lightgrey')
plt.show()

# 绘制着色图,复用同一个布局pos
Color=random.sample(range(nNodes), nNodes)
print(Color)    
nx.draw_networkx(Gdraw, pos=pos, with_labels=True, node_color=Color)
plt.show()

关键改动说明

  • 新增pos = nx.spring_layout(Gdraw):提前计算所有节点的位置坐标,布局算法可以根据需求替换(比如nx.circular_layout()、nx.kamada_kawai_layout()等)
  • 两次调用nx.draw_networkx()时都添加pos=pos参数,强制使用预先生成的布局位置

内容的提问来源于stack exchange,提问作者Maurice Clerc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:07:14