Python pyqtgraph中的多个重叠图(绑定轴时出现问题)
我的图表有点问题。我可以同时绘制两条曲线,但第二条曲线似乎也绑定到左轴,有人知道我是否可以用第二条曲线绘制右轴比例吗? 下面是一个简短的示例:Python pyqtgraph中的多个重叠图(绑定轴时出现问题),python,python-2.7,pyqt,pyqt4,pyqtgraph,Python,Python 2.7,Pyqt,Pyqt4,Pyqtgraph,我的图表有点问题。我可以同时绘制两条曲线,但第二条曲线似乎也绑定到左轴,有人知道我是否可以用第二条曲线绘制右轴比例吗? 下面是一个简短的示例: from PyQt4 import QtCore, QtGui import pyqtgraph as pg import random class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__
from PyQt4 import QtCore, QtGui
import pyqtgraph as pg
import random
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.central_widget = QtGui.QStackedWidget()
self.setCentralWidget(self.central_widget)
self.login_widget = LoginWidget(self)
self.login_widget.button.clicked.connect(self.plotter)
self.central_widget.addWidget(self.login_widget)
def plotter(self):
self.data =[0]
self.data2 = [0]
self.curve = self.login_widget.plot.getPlotItem().plot()
self.curve2 =self.login_widget.plot.getPlotItem().plot()
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.updater)
self.timer.start(0)
def updater(self):
self.data.append(self.data[-1]+0.2*(0.5-random.random()) )
self.curve.setData(self.data, pen=pg.mkPen('b', width=1))
self.data2.append(self.data2[-1]+0.2*(0.5-random.random()) )
self.curve2.setData(self.data2, pen=pg.mkPen('r', width=1))
class LoginWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(LoginWidget, self).__init__(parent)
layout = QtGui.QVBoxLayout()
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
self.button = QtGui.QPushButton('Start Plotting')
layout.addWidget(self.button)
self.plot = pg.PlotWidget(title='Force and Extension vs. Time')
#self.plot.showGrid(x=True,y=True)
self.plot.showAxis('right')
p2 = pg.ViewBox()
self.plot.scene().addItem(p2)
p2.setXLink(self.plot)
ax2 = self.plot.getAxis('right').linkToView(p2)
ax = self.plot.getAxis('bottom')
ax3 = self.plot.getAxis('right')
ax3.setLabel('Extension', units='in.')
ax.setLabel('Time', units='s')
ay = self.plot.getAxis('left')
ay.setLabel('Force', units='lbf')
layout.addWidget(self.plot)
self.setLayout(layout)
def pg_clear(self):
self.plot.clear()
if __name__ == '__main__':
app = QtGui.QApplication([])
window = MainWindow()
window.show()
app.exec_()
基于本文所示的示例,我实现了以下解决方案,我为每个轴的标签添加了必要的颜色,以便于识别数据,我还实现了updateViews()函数,以便在更改屏幕大小时正确显示 注意:我已经修改了生成数据的函数,以便观察更改
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.central_widget = QtGui.QStackedWidget()
self.setCentralWidget(self.central_widget)
self.login_widget = LoginWidget(self)
self.login_widget.button.clicked.connect(self.plotter)
self.central_widget.addWidget(self.login_widget)
self.curve = self.login_widget.it1
self.curve2 =self.login_widget.it2
def plotter(self):
self.data =[0]
self.data2 = [0]
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.updater)
self.timer.start(0)
def updater(self):
self.data.append(self.data[-1]+10*(0.5-random.random()))
self.curve.setData(self.data, pen=pg.mkPen('b', width=1))
self.data2.append(self.data2[-1]+0.1*(0.5-random.random()))
self.curve2.setData(self.data2, pen=pg.mkPen('r', width=1))
class LoginWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(LoginWidget, self).__init__(parent)
layout = QtGui.QVBoxLayout()
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
self.button = QtGui.QPushButton('Start Plotting')
layout.addWidget(self.button)
self.plot = pg.PlotWidget(title='Force and Extension vs. Time')
layout.addWidget(self.plot)
self.setLayout(layout)
p1 = self.plot.plotItem
p2 = pg.ViewBox()
p1.showAxis('right')
p1.scene().addItem(p2)
p1.getAxis('right').linkToView(p2)
p2.setXLink(p1)
self.plot.getAxis('bottom').setLabel('Time', units='s')
self.plot.getAxis('left').setLabel('Force', units='lbf', color="#0000ff")
p1.getAxis('right').setLabel('Extension', units='in.', color="#ff0000")
def updateViews():
p2.setGeometry(p1.vb.sceneBoundingRect())
p2.linkedViewChanged(p1.vb, p2.XAxis)
updateViews()
p1.vb.sigResized.connect(updateViews)
self.it1 = p1.plot()
self.it2 = pg.PlotCurveItem()
p2.addItem(self.it2)
你想显示两个图表的最后n个元素吗?是的,我理解,但我的问题是你想显示开头的所有数据还是只显示最后n个数据。很抱歉,所有数据。如果我们有任何问题,我是否可以获取你的联系信息,以便与我的公司合作?