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.

Reply via email to