Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib:未打开图形窗口时清除图形_Python_Matplotlib_Plot - Fatal编程技术网

Python Matplotlib:未打开图形窗口时清除图形

Python Matplotlib:未打开图形窗口时清除图形,python,matplotlib,plot,Python,Matplotlib,Plot,我正在使用matplotlib绘图,并使用ioff()关闭交互模式,以禁止在创建figrue时自动打开绘图窗口。我想完全控制图形,并且只在明确使用show()命令时才能看到它 现在显然,清除图形和轴的内置命令不再正常工作 例如: import numpy as np import matplotlib.pyplot as mpp class PlotTest: def __init__(self,nx=1,ny=1): # Switch off interactive

我正在使用matplotlib绘图,并使用
ioff()
关闭交互模式,以禁止在创建figrue时自动打开绘图窗口。我想完全控制图形,并且只在明确使用
show()
命令时才能看到它

现在显然,清除图形和轴的内置命令不再正常工作

例如:

import numpy as np
import matplotlib.pyplot as mpp

class PlotTest:

    def __init__(self,nx=1,ny=1):
        # Switch off interactive mode:
        mpp.ioff()

        # Create Figure and Axes:
        self.createFigure(nx, ny)

    def createFigure(self,nx=1,ny=1):
        self.fig, self.axes = mpp.subplots(nx,ny)
        if nx*ny == 1:
            self.axes = np.array([self.axes])

    def linePlot(self):
        X = np.linspace(0,20,21)
        Y = np.random.rand(21)     
        self.axes[0].plot(X,Y)

P = PlotTest()
P.linePlot()
P.fig.show()
现在我想我可以随时使用
p.fig clear()
来简单地清除
p.fig
,但显然不是这样

p.fig.clear()
直接写入脚本并一起执行它,它工作正常,我看到的只是一个空图。然而,这是毫无意义的,因为我从来没有看到过这样的实际绘图

在控制台中手动执行
p.fig.clear()
不会执行任何操作,无论绘图窗口是否打开,所有其他可能的命令也会失败:

P.fig.clf()
P.axes[0].clear()
P.axes[0].cla()
mpp.clf()
mpp.cla()
mpp.close(P.fig)
将命令包装到类方法中也不起作用:

def clearFig(self):
    self.fig.clear()
编辑================

clear()
fig.axes
为空后,
show()
仍显示旧绘图,且仍在绘制轴

/编辑================


是因为我关闭了交互模式吗?

如果在
p.fig.clear()
之后添加对
plt.draw()
的调用,它会清除图形。从

这在交互模式下用于更新已更改但未自动重新绘制的地物。这应该是很少需要的,但可能有一些方法可以修改图形的状态,而不将其标记为过时。请将这些案例报告为bug

我想这不是一个bug,因为您已经关闭了交互模式,所以现在您有责任在需要时显式地重新绘制


您还可以使用
p.fig.canvas.draw_idle()
,它可以作为
clearFigure
方法在类中进行包装。

谢谢,
p.fig.canvas.draw_idle()
在我的示例中似乎有效,我们将尝试看看它是否真的有效。