为何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
相关产品推荐
相关产品推荐

