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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:15:38