【问题标题】:Python Matplotlib: Clear figure when figure window is not openPython Matplotlib:未打开图形窗口时清除图形
【发布时间】:2016-10-18 17:00:10
【问题描述】:

我正在使用 matplotlib 绘图并使用 ioff() 关闭交互模式,以抑制在创建图形时自动打开绘图窗口。我想完全控制这个数字,并且只有在明确使用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() 仍然显示旧图,其中轴仍在绘制中。

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

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

【问题讨论】:

    标签: python matplotlib plot


    【解决方案1】:

    如果您在P.fig.clear() 之后添加对plt.draw() 的调用,则会清除该数字。来自docs

    这在交互模式下用于更新已更改但不会自动重新绘制的图形。这应该只是很少需要,但可能有一些方法可以修改图形的状态而不将其标记为陈旧。请将这些情况报告为错误。

    我想这不是错误,因为您已关闭交互模式,因此您现在有责任在需要时显式重绘。

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

    【讨论】:

    • 谢谢,P.fig.canvas.draw_idle() 在我的示例中似乎有效,将尝试看看它是否真的有效。
    猜你喜欢
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多