2014-05-15 3 views
1

pyqtgraph에 두 개의 Y- 스케일로 플롯을 생성하려면 어떻게해야합니까?pyqtgraph에서 두 개의 Y- 스케일 (twinx 형)

두 개의 다른 색상 (선의 색상에 해당)이 필요합니다.

enter image description here

은하기 matplotlib 그것은 this example 같이 twinx을 사용하여 수행 될 수있다.

단일 플롯 객체로 수행 할 방법이 없다면 다른 플롯 (왼쪽에 y 축이 있음)에 플롯 (오른쪽에 y 축이 있음)을 오버레이하는 방법이 있습니까?

+0

원하는 답이 mpl과 관련이 없으므로 matplotlib 태그를 제거했습니다. – tacaswell

답변

3

pyqtgraph/examples/MultiplePlotAxes.py을 참조하십시오.

솔루션은 사용자가 설명한 것입니다. 두 개의 PlotItem을 오버레이합니다.

3

다음은 내가 생각하는 몇 가지 코드입니다. 이것은 두 개의 pyqtgraph 예제 인 PlotSpeedTest.py와 MultiplePlotAxes.py의 확장입니다.

from pyqtgraph.Qt import QtGui, QtCore 
import numpy as np 
import pyqtgraph as pg 
pg.setConfigOptions(antialias=True) 
pg.setConfigOption('background', '#c7c7c7') 
pg.setConfigOption('foreground', '#000000') 
from pyqtgraph.ptime import time 
app = QtGui.QApplication([]) 

p = pg.plot() 
p.setXRange(0,10) 
p.setYRange(-10,10) 
p.setWindowTitle('Current-Voltage') 
p.setLabel('bottom', 'Bias', units='V', **{'font-size':'20pt'}) 
p.getAxis('bottom').setPen(pg.mkPen(color='#000000', width=3)) 
p.setLabel('left', 'Current', units='A', 
      color='#c4380d', **{'font-size':'20pt'}) 
p.getAxis('left').setPen(pg.mkPen(color='#c4380d', width=3)) 
curve = p.plot(x=[], y=[], pen=pg.mkPen(color='#c4380d')) 
p.showAxis('right') 
p.setLabel('right', 'Dynamic Resistance', units="<font>&Omega;</font>", 
      color='#025b94', **{'font-size':'20pt'}) 
p.getAxis('right').setPen(pg.mkPen(color='#025b94', width=3)) 

p2 = pg.ViewBox() 
p.scene().addItem(p2) 
p.getAxis('right').linkToView(p2) 
p2.setXLink(p) 
p2.setYRange(-10,10) 

curve2 = pg.PlotCurveItem(pen=pg.mkPen(color='#025b94', width=1)) 
p2.addItem(curve2) 

def updateViews(): 
    global p2 
    p2.setGeometry(p.getViewBox().sceneBoundingRect()) 
    p2.linkedViewChanged(p.getViewBox(), p2.XAxis) 

updateViews() 
p.getViewBox().sigResized.connect(updateViews) 

x = np.arange(0, 10.01,0.01) 
data = 5+np.sin(30*x) 
data2 = -5+np.cos(30*x) 
ptr = 0 
lastTime = time() 
fps = None 

def update(): 
    global p, x, curve, data, curve2, data2, ptr, lastTime, fps 
    if ptr < len(x): 
     curve.setData(x=x[:ptr], y=data[:ptr]) 
     curve2.setData(x=x[:ptr], y=data2[:ptr]) 
     ptr += 1 
     now = time() 
     dt = now - lastTime 
     lastTime = now 
     if fps is None: 
      fps = 1.0/dt 
     else: 
      s = np.clip(dt*3., 0, 1) 
      fps = fps * (1-s) + (1.0/dt) * s 
     p.setTitle('%0.2f fps' % fps) 
    else: 
     ptr = 0 
    app.processEvents() ## force complete redraw for every plot. Try commenting out to see if a different in speed occurs. 
timer = QtCore.QTimer() 
timer.timeout.connect(update) 
timer.start(0) 


if __name__ == '__main__': 
    import sys 
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 
     QtGui.QApplication.instance().exec_() 
+0

코드를 추가해 주셔서 감사합니다. –

+0

대단히 환영합니다. 희망이 도움이됩니다. – user2070870