You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQtGraph实时绘图:添加随数据联动的右侧线标签可行吗?

在PyQtGraph中实现实时曲线末端附着标签

完全可行,你可以通过pyqtgraph.TextItem结合数据更新时的坐标转换来实现标签随曲线末端同步移动的效果。以下是可直接运行的参考示例:

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np

# 初始化应用
app = QtGui.QApplication([])
win = QtGui.QMainWindow()
win.setWindowTitle("实时曲线末端标签示例")
plot_widget = pg.PlotWidget()
win.setCentralWidget(plot_widget)
win.show()

# 初始化数据
x = np.arange(0, 100)
y1 = np.sin(x / 10)
y2 = np.cos(x / 10)

# 创建曲线
curve1 = plot_widget.plot(x, y1, pen='r', name='曲线1')
curve2 = plot_widget.plot(x, y2, pen='b', name='曲线2')

# 创建标签并添加到绘图区
label1 = pg.TextItem(text='曲线1', color='r')
label2 = pg.TextItem(text='曲线2', color='b')
plot_widget.addItem(label1)
plot_widget.addItem(label2)

def update_data():
    global x, y1, y2
    # 生成新数据点
    new_x = x[-1] + 1
    new_y1 = np.sin(new_x / 10)
    new_y2 = np.cos(new_x / 10)
    # 更新数据数组
    x = np.append(x, new_x)
    y1 = np.append(y1, new_y1)
    y2 = np.append(y2, new_y2)
    # 限制数据长度,避免内存占用过大
    if len(x) > 200:
        x = x[-200:]
        y1 = y1[-200:]
        y2 = y2[-200:]
    # 更新曲线数据
    curve1.setData(x, y1)
    curve2.setData(x, y2)
    
    # 更新标签位置:将数据坐标转换为绘图区像素坐标,偏移到曲线右侧
    view_box = plot_widget.getViewBox()
    # 曲线1标签位置
    pos1 = view_box.mapFromData(x[-1], y1[-1])
    label1.setPos(pos1.x() + 15, pos1.y())
    # 曲线2标签位置
    pos2 = view_box.mapFromData(x[-1], y2[-1])
    label2.setPos(pos2.x() + 15, pos2.y())

# 设置定时器,每50ms更新一次数据
timer = QtCore.QTimer()
timer.timeout.connect(update_data)
timer.start(50)

# 启动应用
if __name__ == '__main__':
    QtGui.QApplication.instance().exec_()

关键实现说明

  1. 标签创建:使用pg.TextItem创建文本标签,支持自定义颜色、字体等样式;
  2. 坐标转换:通过ViewBox.mapFromData()将曲线末端的数据坐标转换为绘图区的像素坐标,确保标签位置与曲线数据同步;
  3. 实时更新:在数据更新函数中,每次生成新数据后重新计算标签位置,通过定时器触发实时刷新。

如果需要更复杂的标签样式(如带背景框、连接线),可以继承pg.GraphicsObject自定义标签组件,基础的跟随移动需求上述代码完全满足。

备选库方案(若PyQtGraph无法满足特殊需求)

  • Matplotlib:通过annotate函数结合实时更新回调,可实现类似效果,但实时绘制性能略低于PyQtGraph;
  • Bokeh:适合Web端实时可视化,通过自定义标注组件实现跟随标签,但需要基于Web环境运行。

内容的提问来源于stack exchange,提问作者Qosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:05:21