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

为何matplotlib.pyplot的show()函数对同一Axes对象仅生效一次?

为什么第二次plt.show()无法显示之前的绘图?

核心原因是调用plt.show()后,Matplotlib会默认清空并关闭当前的图形资源。第一次调用plt.show()时,程序渲染并展示了包含y=sin(x)的图形,之后Matplotlib会自动释放这个图形的内存,此时你之前创建的ax已经不再属于任何活跃的图形对象了。

当你后续再执行ax.plot(x, x),这个操作其实没有关联到有效的图形上,第二次调用plt.show()时,Matplotlib会创建一个新的空图形来展示,自然看不到之前的sin(x)曲线。

两种解决思路

  • 方法一:合并绘图操作,仅调用一次plt.show()
    把所有需要绘制的曲线都完成后,再调用一次plt.show(),就能在同一个坐标轴上显示所有曲线:

    import matplotlib.pyplot as plt
    import numpy as np
    
    fig, ax = plt.subplots()
    x = np.linspace(1, 100, 10)
    
    ax.plot(x, np.sin(x))
    ax.plot(x, x)  # 先完成全部绘图操作
    
    plt.show()  # 一次性展示所有内容
    
  • 方法二:设置plt.show(block=False)保留图形资源
    如果确实需要分步骤展示(比如中间有其他逻辑操作),可以给第一次plt.show()添加block=False参数,这样展示窗口后程序不会暂停,也不会清空图形资源,后续添加的曲线仍会作用在原来的fig和ax上:

    import matplotlib.pyplot as plt
    import numpy as np
    
    fig, ax = plt.subplots()
    x = np.linspace(1, 100, 10)
    
    ax.plot(x, np.sin(x))
    plt.show(block=False)  # 不阻塞程序,保留当前图形
    
    ax.plot(x, x)
    plt.show()  # 此时能看到两条曲线
    

    注意:用这个参数时,第一次的展示窗口会保留到第二次plt.show()调用后,关闭窗口程序才会结束。

内容的提问来源于stack exchange,提问作者hi there

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:41:03