Python3+PyQt5+QtChart 实现简单的实时更新曲线图

QtChart实现Y轴单曲线,X轴实时时间轴

前言

练手做个实时曲线,以演示采集到的数据。参考了https://www.jianshu.com/p/2c584fa2e469的文章。

准备工作

首先,通过QT的帮助文档了解下QChart、QSplineSeries(或者其他的Series类)、QValueAxis等类的描述。
QChart
QChart是一个可以在QGraphicsScene中显示的QGraphicsWidget。它管理不同类型的系列和其他图表相关对象(如图例和轴)的图形表示。要简单地在布局中显示图表,可以使用便利类QChartView代替QChart。此外,直线、平滑曲线、面积和散射图可以通过QPolarChart类来表示为极坐标图。
QSplineSeries
一个spline series存储QPainterPath绘制平滑曲线所需的数据点和段控制点。当数据发生变化时,控制点会自动计算。该算法对点进行计算,以便绘制平滑曲线。
QValueAxis
可以设置一个值轴来显示带有标记、网格线和阴影的轴线。在轴上的值是在标记的位置绘制的。
QDateTimeAxis
可以设置QDateTimeAxis来显示带有标记标记、网格线和阴影的轴线。可以通过设置适当的DateTime格式来配置轴线上显示的值。QDateTimeAxis可以表示公元前4714年到公元287396年之间的时间。关于其他与QDateTime相关的信息,请参阅QDateTime文档。
*void QChart::addSeries(QAbstractSeries series)
将series添加到chart中,并且chart获得series的所有权,即chart成为series的parent。
*void QChart::addAxis(QAbstractAxis axis, Qt::Alignment alignment)
将坐标轴添加到图表中的指定的位置(左边,下方,右边,上方)。这个chart获得坐标轴的所有权。
*bool QAbstractSeries::attachAxis(QAbstractAxis axis)
将指定的坐标轴附加给series。
如果成功,返回true,否则,返回false

代码实现

一个简单的演示实时曲线图,可直接运行。``

import sys
import random
from PyQt5.QtChart import QDateTimeAxis,QValueAxis,QSplineSeries,QChart,QChartView
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QPainter
from PyQt5.QtCore import QDateTime,Qt,QTimer


class ChartView(QChartView,QChart):
    def __init__(self, *args, **kwargs):
        super
  • 10
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PyQt5.QtChart 是 PyQt5 中的一个模块,它提供了一些强大的图表组件,可以帮助我们快速实现各种类型的图表,包括动态曲线图。 下面是一个简单的示例,演示如何使用 PyQt5.QtChart 实现动态曲线图: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout, QWidget from PyQt5.QtChart import QChart, QChartView, QLineSeries from PyQt5.QtCore import Qt, QTimer import random class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建曲线图和曲线 self.chart = QChart() self.series = QLineSeries() self.chart.addSeries(self.series) # 设置图表标题和坐标轴标签 self.chart.setTitle("Dynamic Curve") self.chart.setAnimationOptions(QChart.SeriesAnimations) self.chart.createDefaultAxes() self.chart.axes()[0].setTitleText("X") self.chart.axes()[1].setTitleText("Y") # 创建图表视图 self.chart_view = QChartView(self.chart) self.chart_view.setRenderHint(QPainter.Antialiasing) # 创建布局并添加图表视图 layout = QGridLayout() layout.addWidget(self.chart_view) # 创建窗口并设置布局 central_widget = QWidget() central_widget.setLayout(layout) self.setCentralWidget(central_widget) # 创建定时器并连接到更新函数 self.timer = QTimer(self) self.timer.timeout.connect(self.update_plot) self.timer.start(50) # 初始化计数器和数据列表 self.count = 0 self.data = [] def update_plot(self): # 更新计数器和数据列表 self.count += 1 self.data.append(random.randint(0, 100)) # 更新曲线数据 self.series.clear() for i in range(len(self.data)): self.series.append(i, self.data[i]) # 设置坐标轴范围 self.chart.axisX().setRange(max(0, self.count-100), self.count) self.chart.axisY().setRange(0, 100) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在这个例子中,我们创建了一个 QMainWindow 窗口,并在其中添加了一个 QChartView 视图,用于显示动态曲线图。我们还创建了一个 QTimer 定时器,并将其连接到 update_plot() 函数,以定期更新曲线图的数据。 在 update_plot() 函数中,我们生成一个随机数,并将其添加到数据列表中。然后,我们清除曲线的所有数据,重新将数据添加到曲线中。最后,我们根据数据的数量调整坐标轴的范围。 请注意,我们使用了一个计数器来记录数据的数量,以便我们可以根据需要滚动我们的曲线图。在这个例子中,我们每次只显示最近的 100 个数据点。 运行这个示例程序,你将会看到一个动态曲线图,显示随机生成的数值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值