首页 > 解决方案 > Matplotlib 动画子图

问题描述

我正在尝试创建 matplotlib 子图,这些子图会随着实时数据的进入(在 tkinter python 应用程序的更大框架内)进行动画处理。我能够使动画功能在正常绘图上正常工作,但是当我修改子图的代码时,行为变得奇怪——大量的窗口会立即打开,只填充一个子图。

def showAnimatedValues():
    ani = FuncAnimation(plt.gcf(), animate, 2000)
    plt.show()

def animate(self,analyzed=False):
    alldates = []
    alldata=[]

    for device_data in fetched:
        data=[]
        dates=[]
        for tup in device_data:
            if analyzed:
                global device
                device=str(tup[0])
                data.append(data_analysis(float(tup[1])))
            else:
                data.append(float(tup[1]))
            date=tup[2]
            formatted_date=reverse_formatter(date)
            formatted_date-=timedelta(hours=4)
            dates.append(str(formatted_date))
        alldates.append(dates)
        alldata.append(data)

    if len(alldates)>1:

        plt.cla()
        fig, axs = plt.subplots(len(alldates),squeeze=True)
        fig.suptitle('Raw Live Current Data for Selected Devices')
        for i in range(len(alldates)):
            axs[i].plot(alldates[i],alldata[i])
            axs[i].get_xaxis().set_visible(False)
            axs[i].set_title(str(devices[i]))
    
    else:

        plt.cla()
        plt.plot(alldates[0],alldata[0])
        plt.title('Raw Live Current Data for Selected Device')
        plt.title(str(devices[0]), loc='right')        
        plt.gca().axes.get_xaxis().set_visible(False)

button1 = tk.Button(text='Fetch Data ', command=getValues)
button2 = tk.Button(text='Plot Raw Data ', command=showValues)
button3 = tk.Button(text='Plot Analyzed Data ', command=showAnalyzedValues)
button4 = tk.Button(text='Plot Live Raw Data ', command=showAnimatedValues)
button5 = tk.Button(text='Plot Live Analyzed Data ', command=showAnimatedAnalyzedValues)

canvas1.create_window(300, 180, window=button1)
canvas1.create_window(400, 180, window=button2)
canvas1.create_window(520, 180, window=button3)
canvas1.create_window(645, 180, window=button4)
canvas1.create_window(780, 180, window=button5)

标签: pythonmatplotlibanimation

解决方案


推荐阅读