pyqtgragh——动态数据可视化:绘制静态和动态两种数据曲线

pyqtgragh可以实现动态实时绘图,非常的强大!所以学习一下!

环境准备

pip install pyqtgraph
pip install PyQt5

绘图实战

创建静态数据:

import pyqtgraph as pg
import numpy as np
 
a = np.random.random(100)
b = np.random.random(50)

使用PyQtGraph绘制折线图

绘制静态数据的单条曲线

import pyqtgraph as pg
import numpy as np
a = np.random.random(100)
def pg_plot():
    app = pg.QtGui.QApplication([])
    pg.plot(a,title='Irvingao')
    app.exec_()

pg_plot()

在这里插入图片描述

绘制静态数据的双曲线(分别绘制,不在同一个图表中)

import pyqtgraph as pg
import numpy as np
a = np.random.random(100)
b = np.random.random(50)
def pg_plot():
    app = pg.QtGui.QApplication([])
    pg.plot(a,title='a 静态数据的双曲线绘制')
    pg.plot(b, title='b 静态数据的双曲线绘制')
    app.exec_()

pg_plot()

在这里插入图片描述

绘制静态数据的双曲线(在同一个图表中)

如果需要使用plot()方法在同一个图形中绘制多个数据,需要先将pyqtgraph的plot()方法实例化,然后再使用实例化后的plot的plot()方法进行图形绘制:

import pyqtgraph as pg
import numpy as np
a = np.random.random(100)
b = np.random.random(50)
def pg_plot_add():
    plot = pg.plot(title='同一个图表中绘制两条曲线')
    plot.plot(a,pen='g')
    plot.plot(b,pen='r')
    pg.QtGui.QGuiApplication.exec_()

pg_plot_add()

在这里插入图片描述

绘制静态数据的双曲线(在同一个窗口,不同的图标中)

过pyqtgraph模块的GraphicsWindow方法,我们可以创建一个空的图形窗口,然后使用其addplot()方法添加图形:

def pg_windows_addplot():
    win = pg.GraphicsWindow(title="在同一个窗口,不同的图标中绘制双曲线")
    plot1 = win.addPlot(title='a 窗口绘制图形')
    plot1.plot(a)
    plot2 = win.addPlot(title='b 窗口绘制图形')
    plot2.plot(b)
    pg.QtGui.QApplication.exec_()
    
pg_windows_addplot()

在这里插入图片描述

绘制动态实时图表

pyqtgraph的绘图数据主要是通过setData()这个方法来转化为图形。我们可以设置一个定时器,每隔一个时间重新调用setData()方法对图形数据进行设置,就能够实现实时的数据可视化呈现。

数据

采用获取实时CPU的利用率数据作为数据来源:

def get_cpu_info():
    cpu = "CPU:%0.2f" % psutil.cpu_percent(interval=1) + "%"
    return cpu

绘制单条动态曲线

这里通过每秒获取CPU的利用率来进行实时绘图:

import pyqtgraph as pg
import numpy as np
import psutil

# 获取CPU使用率的定时回调函数
def get_cpu_info():
    cpu = "%0.2f" % psutil.cpu_percent(interval=1)
    data_list.append(float(cpu))
    print(float(cpu))
    plot.setData(data_list,pen='g')

if __name__ == '__main__':
    data_list = []

    # pyqtgragh初始化
    # 创建窗口
    app = pg.mkQApp()  # 建立app
    win = pg.GraphicsWindow()  # 建立窗口
    win.setWindowTitle(u'pyqtgraph 实时波形显示工具')
    win.resize(800, 500)  # 小窗口大小
    # 创建图表
    historyLength = 100  # 横坐标长度
    p = win.addPlot()  # 把图p加入到窗口中
    p.showGrid(x=True, y=True)  # 把X和Y的表格打开
    p.setRange(xRange=[0, historyLength], yRange=[0, 100], padding=0)
    p.setLabel(axis='left', text='CPU利用率')  # 靠左
    p.setLabel(axis='bottom', text='时间')
    p.setTitle('CPU利用率实时数据')  # 表格的名字
    plot = p.plot()
    
    timer = pg.QtCore.QTimer()
    timer.timeout.connect(get_cpu_info) # 定时刷新数据显示
    timer.start(1000) # 多少ms调用一次

    app.exec_()

在这里插入图片描述

在这里插入图片描述

绘制动态数据的双曲线(在同一个窗口,不同的图标中)

绘制双曲线的方式可以参考静态图表的绘制,在这里仅演示在同一窗口中绘制两条动态曲线。

数据来源

采用获取实时CPU的利用率和内存占用率数据作为数据来源:

def get_cpu_info():
    cpu = "CPU:%0.2f" % psutil.cpu_percent(interval=1) + "%"
	memory = "MEM:%0.2f" % psutil.virtual_memory().percent(interval=1) + "%"
    return cpu, memory 

绘制动态双曲线

import pyqtgraph as pg
import numpy as np
import psutil

# 获取CPU使用率
def get_cpu_info():
    cpu = "%0.2f" % psutil.cpu_percent(interval=1)
    cpu_data_list.append(float(cpu))
    print(float(cpu))
    plot1.setData(cpu_data_list,pen='g')
    memory = "%0.2f" % psutil.virtual_memory().percent
    memory_data_list.append(float(memory))
    print(memory)
    plot2.setData(memory_data_list,pen='r')


if __name__ == '__main__':
    cpu_data_list = []
    memory_data_list = []

    # pyqtgragh初始化
    # 创建窗口
    app = pg.mkQApp()  # 建立app
    win = pg.GraphicsWindow()  # 建立窗口
    win.setWindowTitle(u'pyqtgraph 实时波形显示工具')
    win.resize(800, 500)  # 小窗口大小
    # 创建图表
    historyLength = 100  # 横坐标长度
    p1 = win.addPlot()  # 把图p加入到窗口中
    p1.showGrid(x=True, y=True)  # 把X和Y的表格打开
    p1.setRange(xRange=[0, historyLength], yRange=[0, 100], padding=0) # x轴和y轴的范围
    p1.setLabel(axis='left', text='CPU利用率')  # 靠左
    p1.setLabel(axis='bottom', text='时间')
    p1.setTitle('CPU利用率实时数据')  # 表格的名字
    plot1 = p1.plot()
    
    p2 = win.addPlot()  # 把图p加入到窗口中
    p2.showGrid(x=True, y=True)  # 把X和Y的表格打开
    p2.setRange(xRange=[0, historyLength], yRange=[0, 100], padding=0)
    p2.setLabel(axis='left', text='内存占用率')  # 靠左
    p2.setLabel(axis='bottom', text='时间')
    p2.setTitle('内存占用率实时数据')  # 表格的名字
    plot2 = p2.plot()

    timer = pg.QtCore.QTimer()
    timer.timeout.connect(get_cpu_info) # 定时刷新数据显示
    timer.start(1) # 多少ms调用一次

    app.exec_()

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45779334/article/details/113095313