清除Matplotlib Python中的子图subplot。

6
我写了一个简单的Python函数来生成一个matplotlib图形。我从另一个脚本中多次调用plotData,但每次它都会生成一个新的图形。我想要的是始终只有一个图形,并使用类似于subplot.clear()的方法在数据更改之间清除子图。
我需要一种从plotData外部标识图形的方法,以便我可以清除新数据的图形。最好的实现方法是什么?
## Plot Data Function
def plotData(self):

        # Setup figure to hold subplots
        f = Figure(figsize=(10,8), dpi=100)

        # Setup subplots
        subplot1=f.add_subplot(2,1,1)
        subplot2=f.add_subplot(2,1,2)

        # Show plots
        dataPlot = FigureCanvasTkAgg(f, master=app)
        dataPlot.show()
        dataPlot.get_tk_widget().pack(side=RIGHT, fill=BOTH, expand=1)
2个回答

8

我不确定问题出在哪里。如果要更新绘图,您需要编写一个函数来执行此操作。我会称此函数为plotData。在此之前,您还需要设置绘图。这就是您目前在plotData中所做的。因此,让我们将其重命名为generatePlot

class SomeClass():
    ...

    def generatePlot(self):
        # Setup figure to hold subplots
        f = Figure(figsize=(10,8), dpi=100)

        # Setup subplots
        self.subplot1=f.add_subplot(2,1,1)
        self.subplot2=f.add_subplot(2,1,2)

        # Show plots
        dataPlot = FigureCanvasTkAgg(f, master=app)
        dataPlot.show()
        dataPlot.get_tk_widget().pack(side=RIGHT, fill=BOTH, expand=1)

    ## Plot Data Function
    def plotData(self, data, otherdata):
        #clear subplots
        self.subplot1.cla()
        self.subplot2.cla()
        #plot new data to the same axes
        self.subplot1.plot(data)
        self.subplot2.plot(otherdata)

现在你只需要在开头调用generatePlot一次。之后,您可以随时使用新数据更新图表。

6
您可以使用

标签


subplot.cla()  # which clears data but not axes
subplot.clf()  #  which clears data and axes

另外,如果你将图形和子图定义为self.fig和self.subplots等,那么你可以从它们所属的类实例中访问它们。 - Nick H
如果一个图形是“self”定义的,你会如何搜索它?在修改代码应用之前,必须以某种方式重新定位它。 - Spencer H
2
今天,命令subplot.clf()被替换为subplot.clear()。 - janpeter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接