【发布时间】:2013-09-21 15:49:50
【问题描述】:
有人可以帮助我如何使用 pyqtgraph 创建一个两轴图 w.r.t 时间。例如,绘制速度与扭矩与时间的关系,即时间是 x 轴并且正在移动,速度与扭矩的关系是时间的函数。
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
from pyqtgraph.ptime import time
from numpy import *
from socket import *
import time
app = QtGui.QApplication([])
x = [0,1,2,3,4,5,6,7,8,9];
y = [0,2,4,6,8,10,12,16,18,20];
pg.mkQApp()
pw = pg.PlotWidget()
pw.show()
for i in range(1,20):
p1 = pw.plotItem
p2 = pg.ViewBox()
p1.showAxis('right')
p1.scene().addItem(p2)
p2.setGeometry(p1.vb.sceneBoundingRect())
p1.getAxis('right').linkToView(p2)
p2.setXLink(p1)
x.append(i)
y.append(i*2)
p1.plot(x)
#time.sleep(1)
p2.addItem(p1.plot(y, pen='b'))
#time.sleep(1)
【问题讨论】:
-
听起来您在谈论 3D 线图,对吗?您能否发布您正在寻找的情节类型的示例图片?
-
感谢您的快速回复。是的,你是对的。我正在寻找 3D 线图。我尝试使用上面的编辑选项附加示例图,但出现错误。所以我已经包含了上面的代码sn-p。我需要的三个解决方案是 1.Z 轴是时间并且正在移动,即旧的历史数据应该出来,只显示新数据(Z 轴的时间范围是固定的) 2.看起来每个实例都重新绘制了绘图,即我在同一框架内看到多个图表 3.此外,图表没有动态更新,即图表框架挂起,仅在最后显示。
-
您提供了一个带有两个 y 轴的 2D 图(这很好,但与 3D 图不同;有关 3D 示例,请参见示例/GLLinePlotItem.py)。 1,2。绘制的所有数据都是持久的;调用 plot.clear() 删除旧条目。 3. Qt 要求您为每次想要的更新调用 QtGui.QApplication.processEvents(),或者启动事件循环 (QApplication.exec_()) 并通过计时器回调更新绘图。
-
谢谢卢克。现在我们得到了我们想要的。我们还探索了动态移动 X 轴以在固定的 x 轴框架中仅显示新数据,我们在函数 setXRange 中得到了解决方案。现在情节正在按预期工作。我很欣赏这种形式的讨论。