Hari,

While I am not intimately acquainted with the inner working of the interactive 
matplotlib functionality, I have seen that it tries to not update the figure if 
you ask for some change to it while it is trying to update the figure.  That 
sounds circular, but oh well.  

Perhaps you could have each analysis open a new figure, and have an if 
statement to close 5 (or 10...) figures ago.  

Another subtlety that I have noticed (and perhaps read somewhere) is that there 
could be a difference in behavior between having interactivity set in the 
matplotlibrc file and using the ion() call after having set interactive: False 
in the matplotlibrc file.

Another solution might be a time.sleep after each update of the figure.

(Note that with ion(), the command for updating the figure is pylab.draw, which 
may need to be issued after each case - the pylab/pyplot functions usually have 
a draw_if_interactive call in them.)

-Sterling

PS If I am causing more confusion than help, please let me know.


On Oct 17, 2012, at 10:54AM, hari jayaram wrote:

> Thanks Benjamin, Sterling and Damon  for your prompt  help
> 
> However I am still not able to achieve what I wanted .
> 
> I can get the headless script to work just great where it saves all the 
> figures and I can view them after the script is done running.
> 
> But somehow when I try the figure number method that Sterling suggested , 
> along with the axis clear and redraw method (Damon) , or the decouple and 
> clear and then plot method (Benjamin Root) : I get the plot just spinning 
> with a blue circle on Windows 7 and the script just chugs merrily along.
> 
> 
> I think part of the problem was that I was wrong in the way I stated my 
> application. Each of the 384 data processing steps takes a few seconds..and 
> not a minute as I had indicated.  I tried with both ion() and ioff() and 
> giving the figure a number , which stays constant and clearing the  axis 
> everytime before plotting. But I get a spiining blue circle in Windows.
> 
> I will try and cookup a test case , and send to the list , to reproduce what 
> I am seeing. it may still be that I am calling pylab , pyplot incorrectly and 
> hence not getting the continuously changing figure that your suggestions 
> should give me.
> 
> hari
> 
> 
> 
> 
> Using plt.ion() or plt.ioff() causes a spinning blue-ball on windows..while 
> the rest of the script continues.
> If I use the figure number trick. I get the first figure displayed.
> 
> On Tue, Oct 16, 2012 at 12:15 PM, Benjamin Root <ben.r...@ou.edu> wrote:
> 
> 
> On Tue, Oct 16, 2012 at 11:25 AM, hari jayaram <hari...@gmail.com> wrote:
> Hi 
> I am a relative newbie to matplotlib.
> 
> I have a python script that handles a dataset that comprises 384 sets of data.
> 
> At the present moment , I read in a set of data - process it - and the create 
> a figure using code shown below.
> I am using windows with the default backend ( I think I set it to wx).
> 
> When I run the program, figure after figure shows up..the program continues 
> from well to well plotting the figure. I can close the figure window using 
> the X on the right -hand side..while the program chugs along.
> 
> Is there a way to just recycle the figure object , so that the plot shows up 
> for a brief second and refreshes when the next calculation is complete. Each 
> process_data function , takes a few minutes. 
> 
> Alternatively I just want to close the figure object I show after a brief 
> lag.  I am OK if that happens instantaneously..but I dont know how to achieve 
> this.
> Do I have to use the matplotlib.Figure object to achieve this functionality
> 
> Thanks
> Hari
> 
> 
> 
> Hari,
> 
> To recycle the figure, try the following:
> 
> 
> 
> import matplotlib.pyplot as plt
> 
> def do_my_plot(par1, par2, well_id):
>     processed_data_object = processed_dict[well_id]
>     # Plot all the data
>     par1.plot(processed_data_object.raw_x,processed_data_object.raw_y).
>     par2.plot(....
>     # finally
>     plt.show() 
>     # I tried  fig.clf()
> 
> 
> def plot_and_process_data():
>     plt.ion()  # Turn on interactive mode 
>     fig = plt.figure(figsize=(7,7)
>     ax = fig.add_subplot(1,1,1)
>     par1 =ax.twinx()
>     par2 = ax.twinx()
>  
>     for well_id in list_of_384_well_ids:
>          par1.cla()
>          par2.cla()
>          process_data(well_id)
>          do_my_plot(par1, par2, well_id)
> 
> Note, this is completely untested, but it would be how I would go about it at 
> first.  The "plt.ion()" turns on interactive mode to allow your code to 
> continue running even after the plot window appears (but does not end until 
> the last window is closed.).  Of course, another approach would simply be to 
> do "fig.savefig()" after every update to the figure and never use show() and 
> ion() (essentially, a non-interactive head-less script).
> 
> Hopefully, this helps.
> Ben Root
> 
> 
> ------------------------------------------------------------------------------
> Everyone hates slow websites. So do we.
> Make your web apps faster with AppDynamics
> Download AppDynamics Lite for free today:
> http://p.sf.net/sfu/appdyn_sfd2d_oct_______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to