NetworkX绘图叠加问题求助:多图绘制时图形内容继承重叠
解决NetworkX绘图叠加的问题
你碰到的这个问题其实是matplotlib的默认行为导致的——它会在同一个画布上持续绘制新内容,而不是每次绘图都新建画布。所以你第一次画的5节点图会留在画布上,第二次画10节点图时就直接叠加上去了。
给你两种简单的解决办法,直接修改你的绘图函数就行:
方法1:绘图后关闭画布
在每次调用plt.savefig()之后,加上plt.close(),这样就能关闭当前画布,下次绘图时matplotlib会自动创建一个全新的画布。修改后的函数示例:
def drawV1(numOfNodes,FilePtr): np.random.seed(0) G = nx.Graph() for ii in range(1,numOfNodes+1): G.add_node(str(ii)) nx.draw(G, with_labels = True) plt.savefig(FilePtr) # save as png plt.close() # 关闭当前画布,避免后续绘图叠加
同样把drawV2也做一样的修改,这样不管你连续调用多少次绘图函数,生成的图片都是独立的。
方法2:绘图前显式创建新画布
如果你需要对每个图的尺寸、分辨率做单独设置,可以在绘图前用plt.figure()新建一个画布,示例:
def drawV1(numOfNodes,FilePtr): np.random.seed(0) G = nx.Graph() for ii in range(1,numOfNodes+1): G.add_node(str(ii)) plt.figure(figsize=(6,6)) # 新建一个6x6的画布,可自定义参数 nx.draw(G, with_labels = True) plt.savefig(FilePtr) # save as png plt.close() # 可选,关闭画布释放资源
这两种方法都能解决你遇到的三个场景的问题:
- 场景1(val=1):两次调用
drawV1生成的5节点和10节点图会完全独立,不会叠加 - 场景3(val=3):
drawV1和drawV2的输出图也不会互相影响
本质上就是确保每次绘图都使用独立的matplotlib画布,避免复用同一个画布导致内容叠加。
内容的提问来源于stack exchange,提问作者nsrdn
相关产品推荐
相关产品推荐

