Python matplotlib 实时显示数据

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtGui import QColor
from matplotlib.backends.backend_qt5agg import (FigureCanvasQTAgg, NavigationToolbar2QT as NavigationToolbar)
from matplotlib.figure import Figure
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
from matplotlib import rc
import time
import datetime
import re
import _thread
import random


x1 = []
y1 = []
x2 = []
y2 = []
s1 = []
s2 = []


def run(QTextEdit):
    global count
    global append_Signal

    init_current_time = int(time.time() * 1000)
    count = 1
    while True:
        try:
            time.sleep(0.1)
            # 接收服务器响应

            # 获取当前时间并打印
            # current_time = datetime.datetime.now()
            # print(' Received response:', response)
            # 获取当前时间
            current_time = int(time.time() * 1000) - init_current_time

            inData = random.randint(1, 100)
            set_rssi = -60
            mean_rssi = random.randint(1, 100)
            string = (str(datetime.datetime.now()) + f" 设置阈值:{set_rssi} RSSI原始值:-{inData} 滤波后值:-{mean_rssi}")
            print(string)
            QTextEdit.append(string)
            if "inData" in "inData":
                try:
                    s1.append(int(set_rssi))
                except:
                    s1.append(0)
                try:
                    if int(set_rssi) > -50:
                        s2.append(int(set_rssi) - 7)
                    elif int(set_rssi) < -70:
                        s2.append(int(set_rssi) - 3)
                    else:
                        s2.append(int(set_rssi) - 5)
                except:
                    s2.append(0)

                try:
                    x1.append(current_time / 1000.0)
                    y1.append(0 - int(inData))
                    y2.append(0 - int(mean_rssi))
                except:
                    x1.append(0)
                    y1.append(0)
                    y2.append(0)
        except:
            pass
        if count == 0:
            break



class ApplicationWindow(QtWidgets.QMainWindow):
    global x1
    global y1
    global x2
    global y2
    global s1
    global s2

    def __init__(self):
        super().__init__()
        self._main = QtWidgets.QWidget()
        self.setCentralWidget(self._main)
        # 创建垂直布局
        layout = QtWidgets.QVBoxLayout(self._main)
        # 创建水平布局
        h_layout = QtWidgets.QHBoxLayout(self._main)

        dynamic_canvas = FigureCanvasQTAgg(Figure(figsize=(500, 400)))
        layout.addWidget(dynamic_canvas)
        self.addToolBar(QtCore.Qt.BottomToolBarArea, NavigationToolbar(dynamic_canvas, self))

        self.QTextEdit = QtWidgets.QTextEdit('', self._main)
        self.QTextEdit.setTextColor(QColor(255, 0, 0))
        layout.addWidget(self.QTextEdit)

        # 在水平布局中添加按钮
        self._button1 = QPushButton('开始', self._main)
        self._button2 = QPushButton('暂停', self._main)
        self._button3 = QPushButton('结束|清屏', self._main)
        self._button1.setStyleSheet("background-color: green;color: white;")
        self._button2.setStyleSheet("background-color: blue;color: white;")
        self._button3.setStyleSheet("background-color: red;color: white;")
        font = self._button1.font()
        font.setBold(True)  # 设置字体加粗
        font.setFamily('Microsoft YaHei')  # 设置字体为微软雅黑
        font.setPointSize(15)
        self._button1.setFont(font)
        font = self._button2.font()
        font.setBold(True)  # 设置字体加粗
        font.setFamily('Microsoft YaHei')  # 设置字体为微软雅黑
        font.setPointSize(15)
        self._button2.setFont(font)
        font = self._button3.font()
        font.setBold(True)  # 设置字体加粗
        font.setFamily('Microsoft YaHei')  # 设置字体为微软雅黑
        font.setPointSize(15)
        self._button3.setFont(font)

        h_layout.addWidget(self._button1)
        h_layout.addWidget(self._button2)
        h_layout.addWidget(self._button3)
        # 在垂直布局中添加水平布局
        layout.addLayout(h_layout)

        self._button1.clicked.connect(self.button_run)
        self._button2.clicked.connect(self.button_suspend)
        self._button3.clicked.connect(self.button_finish)

        # 设置窗口的主布局
        self.setLayout(layout)

        self._dynamic_ax = dynamic_canvas.figure.subplots()
        self.set_dynamic_ax()
        self._timer = dynamic_canvas.new_timer(100, [(self._update_canvas, (), {})])
        self._timer.start()

    def set_dynamic_ax(self):
        # 设置坐标轴标签的字体大小
        self._dynamic_ax.xaxis.label.set_size(20)
        self._dynamic_ax.yaxis.label.set_size(20)
        self._dynamic_ax.tick_params(axis='x', labelsize=20)
        self._dynamic_ax.tick_params(axis='y', labelsize=20)
        font = FontProperties(fname=r"c:/windows/fonts/simsun.ttc", size=20)
        self._dynamic_ax.set_title("手机蓝牙RSSI测试", fontproperties=font)
        self._dynamic_ax.set_xlabel('时间/s', fontproperties=font)
        self._dynamic_ax.set_ylabel('手机蓝牙RSSI', fontproperties=font)
        self._dynamic_ax.legend(labels=('RSSI原始值', '滤波后值', '开锁阈值', '关锁阈值'),prop=font, loc='lower right')
        self._dynamic_ax.grid(color='b', ls='--', lw=0.25)
        self._dynamic_ax.set_ylim(-100, 0)  # set_ylim() 将 y 轴的范围设置为(0到10000)

    def _update_canvas(self):
        try:
            # self._dynamic_ax.clear()  # 清除屏幕数据
            self._dynamic_ax.plot(x1, y1, 'g', label='RSSI原始值')
            self._dynamic_ax.plot(x1, y2, 'r', label='滤波后值')
            self._dynamic_ax.plot(x1, s1, 'g:', label='开锁阈值')
            self._dynamic_ax.plot(x1, s2, 'k--', label='关锁阈值')
            self._dynamic_ax.figure.canvas.draw()
        except:
            pass

    def button_run(self):
        self.set_dynamic_ax()
        time.sleep(0.1)
        x1.clear()
        y1.clear()
        x2.clear()
        y2.clear()
        s1.clear()
        s2.clear()
        self.QTextEdit.clear()
        _thread.start_new_thread(run, (self.QTextEdit,))

    def button_suspend(self):
        global count
        count = 0

    def button_finish(self):
        global count
        count = 0
        x1.clear()
        y1.clear()
        x2.clear()
        y2.clear()
        s1.clear()
        s2.clear()
        self.QTextEdit.clear()
        self._dynamic_ax.clear()


if __name__ == "__main__":
    qapp = QtWidgets.QApplication(sys.argv)
    app = ApplicationWindow()
    app.setWindowTitle("蓝牙信号滤波测试工具")
    app.resize(900, 650)
    app.show()
    qapp.exec_()

# pyinstaller -F -w  蓝牙信号滤波测试工具.py
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值