QChart画动态折线图,要求每10毫秒新增一个随机数,每100毫秒刷新一次视图只显示最后1000个数据点,X轴不显示刻度,Y轴显示的刻度为随机数的值,QLineSeries只保存最新的1000个数据点用于显示,旧的数据点全部删除。为保证实刷新速度,要求用链表实现
时间: 2024-11-25 17:15:49 浏览: 25
在使用PyQtCharts创建动态折线图时,你可以按照以下步骤操作:
1. 首先,导入所需的库:
```python
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QTimer, Qt
from PyQt5.QtGui import QPainter
from PyQt5.QtCharts import QChart, QLineSeries, QDateTimeAxis, QValueAxis, QRubberBand
```
2. 创建一个自定义的系列类,用于维护最近的1000个数据点并处理删除旧数据:
```python
class LimitedLineSeries(QLineSeries):
def __init__(self):
super().__init__()
self.max_points = 1000
self.points = []
def append(self, x, y):
if len(self.points) >= self.max_points:
oldest_index = len(self.points) - self.max_points
del self.points[oldest_index]
self.points.append((x, y))
super().append(x, y)
def paint(self, painter, option, index):
# 只绘制最新1000个数据点
painter.drawPoints(self.points)
```
3. 初始化图表、时间轴和Y轴:
```python
chart = QChart()
chart_view = chart.createDefaultView()
chart_view.setRenderHint(QPainter.Antialiasing)
x_axis = QDateTimeAxis()
y_axis = QValueAxis()
y_axis.setFormatter("%g") # 格式化Y轴显示随机数的实际数值
```
4. 创建QTimer定时任务,每10毫秒添加新数据,并每100毫秒更新图表:
```python
timer = QTimer()
timer.timeout.connect(self.update_chart)
timer.start(10) # 每10毫秒
def update_chart():
random_x = QDateTime.currentMSecsSinceEpoch() / 1000 # 获取当前时间(毫秒)
random_y = random.randint(0, 100) # 生成随机数
series.append(random_x, random_y) # 添加到系列
if not chart_view.isUpdating():
chart_view.update()
if chart_view.sceneBoundingRect().width() > 10000: # 刷新时只显示最后1000个数据点
series.removeFirst(len(series) - 1000)
```
5. 隐藏X轴刻度并设置Y轴属性:
```python
x_axis.setVisible(False)
y_axis.setRange(0, 100) # 设置Y轴范围
```
6. 最后,在窗口关闭事件中停止定时器:
```python
def closeEvent(event):
timer.stop()
event.accept()
app = QApplication(sys.argv)
main_window = QMainWindow()
main_window.setWindowTitle("Dynamic Line Chart")
main_window.chart_view.setScene(chart.createScene())
main_window.show()
sys.exit(app.exec_())
```
阅读全文