Real time plotting
A feature of the pylab/matplotlib plotting package that I hadn’t used before is animation. The Animations entry on the Scipy Cookbook explains how to do it. Here is an example of using it to do realtime plotting of a network in Brian. We plot a raster plot and sample membrane potential trace as the CUBA example runs: [python] from brian import * ###### Set up the standard CUBA example ###### N = 4000 eqs=”’ dv/dt = (ge+gi-(v+49*mV))/(20*ms) : volt dge/dt = -ge/(5*ms) : volt dgi/dt = -gi/(10*ms) : volt ”’ P = NeuronGroup(N, eqs, threshold=-50*mV,reset=-60*mV) P.v = -60*mV+10*mV*rand(len(P)) Pe = P.subgroup(3200) Pi = P.subgroup(800) Ce = Connection(Pe, P, ‘ge’, weight=1.62*mV, sparseness=0.02) Ci = Connection(Pi, P, ‘gi’, weight=-9*mV, sparseness=0.02) ###### Real time plotting stuff ###### # First of all, we use standard Brian monitors to record values M = SpikeMonitor(P) trace = StateMonitor(P, ‘v’, record=0) # The ion() command switches pylab’s “interactive mode” on ion() # We set up the plot with the correct axes subplot(211) # Note that we have to store a copy of the objects (plot lines) whose data # we will update in real time rasterline, = plot([], [], ‘.’) # plot points, hence the ‘.’ axis([0, 1, 0, N]) subplot(212) traceline, = plot([], []) # plot lines, hence no ‘.’ axis([0, 1, -0.06, -0.05]) # This network operation updates the graphics every 10ms of simulated time @network_operation(clock=EventClock(dt=10*ms)) def draw_gfx(): # This returns two lists i, t of the neuron indices and spike times for # all the recorded spikes so far i, t = zip(*M.spikes) # Now we update the raster and trace plots with this new data rasterline.set_xdata(t) rasterline.set_ydata(i) traceline.set_xdata(trace.times) traceline.set_ydata(trace[0]) # and finally tell pylab to redraw it draw() run(1*second) draw_gfx() # final draw to get the last bits of data in ioff() # switch interactive mode off show() # and wait for user to close the window before shutting down [/python] We’re thinking about adapting some of this to include in the standard Brian plotting library. Any thoughts?