I am using matplotlib to draw charts and graphs.
When I plot the chart using the command show()
my code blocks at this command.
I would like to refresh my list of values with new data , and than refresh the image on the background. How to do that without closing each time the window with the graph? Below is the code I am using
import pylab
a = (1,2,3,4)
pylab.plot(a)
pylab.show() # blocks here
If you are not using the IPython shell but instead running a program, you probably want to do:
after a
plot()
, possibly followed byso as to wait for the user before plotting something else.
If you do
pyplot.ion()
at the beginning of your program, doingdraw()
can often even be skipped.pyplot.show()
is actually an infinite loop that handles events in the main plotting window (such as zooming, panning, etc.).This works by invoking Ipython with the
-wthread
(or the-pylab
) option. It will not block onshow
anymore.In IPython started with
-pylab
it should not block.Otherwise: With
ion()
you turn the interactive mode on.show()
does not block your system anymore. Everydraw()
orplot(x, y)
updated your plot.ioff()
turns interactive mode off. Useful if you add lots of data and don't want to update every little detail.See also: http://www.scipy.org/Cookbook/Matplotlib/Animations
On MacOS X i had the problem that unblocking only produced a white screen. In the end @tyleha's suggestion using %pylab directly in the note book helped. In fact it's suggested when using the deprecated the -pylab flag: