The easy way to do it is to break your loop into smaller chunks (one or more steps) that get run periodically by a timer. See the scrollingPlots example.
The hard way would be to run your ODE solver in a separate thread and post the results back to the main thread using a signal/slot pair. In either case you should use setData() as in the example to update the plot. On Thursday, March 28, 2019 at 1:48:03 PM UTC-4, Michael DeFeo wrote: > > I am trying to write a program that will solve a differential equation for > several values of one of the equations parameters in a for loop. After each > iteration of the loop I would like to plot the mean value of the solution. > What happens in practice is the the plot will only be generated after > exiting the for loop. A minimal working example demonstrating this issue is > pasted below and attached. Any advice on how to get this working is > appreciated. > > Cheers! > > > > # gui > import pyqtgraph as pg > from pyqtgraph.Qt import QtCore, QtGui > import numpy as np > > # ODE > from scipy.integrate import RK45 > > win = pg.GraphicsWindow() > p1 = win.addPlot() > data = np.empty([100000,2]) # Holds time dep. solution > > g = 0.5 > cntr = 0 > > def EOM(t,y): > global g > return -g*y > > def update(): > p1.plot(tcData[:cntr,:]) > > timer = QtCore.QTimer() > timer.timeout.connect(update) > timer.start(0) > > tC = np.linspace(-0.5,0.5,20) # Sweep parameter > tcData = np.empty([len(tC),2]) # Holds mean solution (plot this data) > for idx,item in enumerate(tC): > ode = RK45(EOM, 0, [5],t_bound=10,max_step=0.001) > cntr = 0 > g = item > while ode.status == 'running': > ode.step() > data[cntr,0] = ode.t > data[cntr,1] = ode.y > cntr+=1 > tcData[idx,0] = item > tcData[idx,1] = np.mean(data[:,1]) > print( idx ) > > > if __name__ == '__main__': > import sys > if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): > QtGui.QApplication.instance().exec_() > > -- You received this message because you are subscribed to the Google Groups "pyqtgraph" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/pyqtgraph/aeacade1-12e1-48d1-a96a-93ce7ce48740%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
