清晰的数字子图matplotlib python

时间:2017-02-02 20:20:07

标签: python matplotlib tkinter

我写了一个简单的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 个答案:

答案 0 :(得分:6)

我不确定我是否完全明白问题所在。 如果要更新绘图,则需要一个执行此操作的函数。我会称这个函数为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一次。之后,您可以随时使用新数据更新绘图。

答案 1 :(得分:5)

你可以使用

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