import sys
import time
from datetime import datetime
import numpy as np
from PyQt5.QtWidgets import QVBoxLayout, QWidget, QApplication
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FC
from PyQt5.QtCore import QThread, pyqtSignal
from matplotlib import pyplot as plt
timeX = []
class Matplotib(QWidget):
def __init__(self):
super(Matplotib, self).__init__()
self.initData()
def initData(self):
self.resize(1300, 800)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 设置画布部分
self.fig = plt.figure()
self.myCanvas = FC(self.fig)
# 设置布局,将组件添加到布局中
self.layout = QVBoxLayout()
self.layout.addWidget(self.myCanvas)
self.setLayout(self.layout)
# 创建线程并连接信号
self.myThread = MyThread()
self.myThread.update_data.connect(self.updateData)
self.myThread.start()
def updateData(self):
timeX.append(datetime.now().strftime('%H:%M:%S'))
dataY1 = self.myThread.dataY1
dataY2 = self.myThread.dataY2
plt.cla() # 清空画布
plt.title('啥也不是折线图', fontsize=12)
plt.plot(timeX,dataY1,label='啥啥啥')
plt.plot(timeX, dataY2, label='是是是')
plt.xlabel('时间')
plt.ylabel('数值')
if len(timeX) > 6:
timeN = int(len(timeX) / 6)
if len(timeX) % 6 > 0:
timeN = int(len(timeX) / 6) + 1
plt.xticks(timeX[::timeN])
plt.legend()
self.myCanvas.draw()
class MyThread(QThread):
update_data = pyqtSignal()
def __init__(self, parent=None):
super(MyThread, self).__init__(parent)
self.dataY1 = []
self.dataY2 = []
def run(self):
while True:
self.dataY1.append(np.random.random())
self.dataY2.append(0.5)
self.update_data.emit() # 发送更新信号
time.sleep(1)# 线程暂停1秒
if __name__ == '__main__':
app = QApplication(sys.argv)
m = Matplotib()
m.show()
sys.exit(app.exec_())
PyQt5 Matplotib绘图-实时
于 2023-09-25 16:08:59 首次发布