首页 > 解决方案 > 如何从 matplotlib 中的图像创建实时图

问题描述

让我首先解释一下我要做什么

我想要 tkinter GUI 屏幕中的 8 个实时图表。这些图表的数据基本上来自一些 USB 端口设备(其代码工作得非常好)。图表应每 1 秒刷新一次。为此,我使用了 matplotlib.backends 模块和 matplotlib.animation 模块。

但是在运行此代码时,输​​出会以一种奇怪的方式生成图形,而且也不是实时的

from matplotlib import style
import matplotlib.animation as animation
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg,NavigationToolbar2Tk)
from tkinter import *

def getvalues():
    myfile=open("sample.txt",'r').read()
    tmp_list = myfile.split('\n')
    xarr=[]
    yarr=[]
    for eachline in tmp_list:
        if len(eachline)>1:
            x,y=eachline.split(',')
            xarr.append(int(x))
            yarr.append(float(y))
    return (xarr,yarr)

def animate(i):
    x,y=getvalues()
    canvas=[]
    for i in range(4):
        fig=Figure(figsize=(3,2),dpi=100)
        plt = fig.add_subplot(4,2,i+1)
        plt.plot(x,y, color="#0000FF")
        plt.set_xlim(0, 50)
        plt.set_ylim(0, 10)
        #plt.legend(["Sensor " + repr(i + 1)])
        canvas.append(FigureCanvasTkAgg(fig, animation_window))
        canvas[i].draw()
        canvas[i].get_tk_widget().pack(fill=BOTH,expand=True)
    for i in range(4,8):
        fig=Figure(figsize=(3,2),dpi=100)
        plt = fig.add_subplot(4,2,i-3)
        plt.plot(x,y,color="#0000FF")
        plt.set_xlim(0, 50)
        plt.set_ylim(0, 10)
        #plt.legend(["Sensor " + repr(i + 1)])
        canvas.append(FigureCanvasTkAgg(fig, animation_window))
        canvas[i].draw()
        canvas[i].get_tk_widget().pack(fill=BOTH,expand=True)
root=Tk()
root.title("testing...")
fig=Figure(figsize=(3,2),dpi=100)
animation_window = Toplevel(root)
animation_window.title("For Stackoverflow")
animate(0)  #otherwise the plots won't show up
ani=animation.FuncAnimation(fig,animate,interval=1000)
root.mainloop()

基本上我需要的是

我已经尽力了;任何帮助将不胜感激...

标签: javascriptpythonpython-3.xuser-interfacematplotlib

解决方案


推荐阅读