我正在做一个项目,它需要我记录一段时间内的数据,同时还需要在屏幕上用实时线图绘制数据。到目前为止,除了线图,我已经得到了所有的数据,但不确定我做错了什么。这是我目前正在使用的导入。
`
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import matplotlib.animation as animation
from matplotlib import pyplot as plt
from matplotlib import style
from tkinter import *
from PIL import Image
import numpy as np
import serial
from serial import Serial
import sqlite3
import time
from datetime import datetime
from array import *
import cv2
from pathlib import Path
from itertools import count
`
用于Y轴绘图的数据存储在一个数据数组中。该数组中的每个索引保存传感器的最后读取值,i=0表示传感器1,依此类推。
`
A=[0,0,0,0,0,0,0,0]
`
这是我试图画出的子情节的定义。我认为我设置得正确,但是我没有得到预期的结果,所以很可能没有。
`
fig1 = plt.Figure(dpi=100, facecolor="#f0f0f0")
a = fig1.add_subplot(111)
a.patch.set_facecolor("#f0f0f0")
a.set_xlabel('time (Sec)')
a.set_ylabel('pressure(kPa)')
a.set_ylim(0,100)
a.set_xlim(0,30)
graph1 = FigureCanvasTkAgg(fig1, master=root)
graph1.get_tk_widget().place(x=10, y=220, width=210, height=280)
graph1.draw();
`
我目前只是想在处理多条线重叠的小问题之前先画一条线。这是我想用来画这条线的函数。
`
def graph_plotdata():
global A
global a
line1 = []
time = []
time.append(next(index))
line1.append(A[0])
a.cla()
a.plot(time, line1)
graph1.draw()
`
为了解决这个问题,我已经尝试了几次这个代码的迭代。最接近我必须让它工作的是在当前状态下,其中正在发生的事情,但不是保持我的最小和最大限制的图形,它完全重新格式化我的绘图和绘图的“不可见”线。
开始前:interface program
启动后:interface reformatted
当涉及到python库时,我并没有太多的经验。
1条答案
按热度按时间46qrfjad1#
我使用字典来存储各种线和线图,然后使用set_data(xdata,ydata)更新线图。我不确定您的数据流是如何工作的,所以我的字典只在我按下更新按钮并生成随机阅读时更新。显然,您需要更改这些部分以匹配您的数据输入。