pyqtgraph
에 두 개의 Y- 스케일로 플롯을 생성하려면 어떻게해야합니까?pyqtgraph에서 두 개의 Y- 스케일 (twinx 형)
두 개의 다른 색상 (선의 색상에 해당)이 필요합니다.
은하기 matplotlib 그것은 this example 같이 twinx
을 사용하여 수행 될 수있다.
단일 플롯 객체로 수행 할 방법이 없다면 다른 플롯 (왼쪽에 y 축이 있음)에 플롯 (오른쪽에 y 축이 있음)을 오버레이하는 방법이 있습니까?
pyqtgraph
에 두 개의 Y- 스케일로 플롯을 생성하려면 어떻게해야합니까?pyqtgraph에서 두 개의 Y- 스케일 (twinx 형)
두 개의 다른 색상 (선의 색상에 해당)이 필요합니다.
은하기 matplotlib 그것은 this example 같이 twinx
을 사용하여 수행 될 수있다.
단일 플롯 객체로 수행 할 방법이 없다면 다른 플롯 (왼쪽에 y 축이 있음)에 플롯 (오른쪽에 y 축이 있음)을 오버레이하는 방법이 있습니까?
pyqtgraph/examples/MultiplePlotAxes.py
을 참조하십시오.
솔루션은 사용자가 설명한 것입니다. 두 개의 PlotItem을 오버레이합니다.
다음은 내가 생각하는 몇 가지 코드입니다. 이것은 두 개의 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>Ω</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_()
코드를 추가해 주셔서 감사합니다. –
대단히 환영합니다. 희망이 도움이됩니다. – user2070870
원하는 답이 mpl과 관련이 없으므로 matplotlib 태그를 제거했습니다. – tacaswell