Re: [Matplotlib-users] Memory leak somewhere?
You made my day! Long life to The close() All my ram and swap file was sucked every time a run my script to generate 260 png images...almost killing my ubuntu! On Tue, May 26, 2009 at 2:23 PM, John Hunter jdh2...@gmail.com wrote: On Tue, May 26, 2009 at 7:39 AM, Michael Droettboom md...@stsci.edu wrote: Does it help if you add a call to plt.clf() to the bottom of the loop? The pyplot interface keeps a reference around to every figure created until they are destroyed so that it can be obtained again by number (this is functionality inspired by matlab). Alternatively, you can use the object-oriented interface to create the figure, which does not have this behavior, e.g., replace fig = plt.figure() with from matplotlib import figure fig = figure.Figure() If all this doesn't help, let me know and I'll look further. Cheers, Mike iCy-fLaME wrote: I was trying to use matplotlib to plot a series of 2D images, but python was using up a large amount of RAM very quickly. I don't know matplotlib that well, so the chance are I am missing something, would appreciate it if anyone can point me to the right direction. I am using: Python 2.4.3 (#1, Jan 21 2009, 01:11:33) [GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2 Example code to run in interpreter mode: from numpy import zeros x = 1651 y = 452 page = zeros((x, y)).astype('float') import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt for i in range(1000): fig = plt.figure() ax = fig.add_subplot(111) cax = ax.imshow(page, cmap=plt.cm.spectral_r, extent=(-44, 176, -30, 30), interpolation = 'bicubic', vmin = -0.003, vmax = 0.003) title = Time = %(i)0.3es) % {'i':i} ax.set_title(title,fontsize=14) fig.colorbar(cax, ticks=[-2e-3, -1e-3, 0, 1e-3, 2e-3], orientation='horizontal') fig.savefig('_tmp.' + str(i) + .png, dpi=300) This code creates 1000 different figures -- either reuse the same figure and clear it as Michael suggests fig = plt.figure(1) # by putting 1 here you reuse the same fig fig.clf() # and clear it or close the figure in the loop fig = plt.figure() # draw and save here plt.close(fig) JDH -- Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT is a gathering of tech-side developers brand creativity professionals. Meet the minds behind Google Creative Lab, Visual Complexity, Processing, iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian Group, R/GA, Big Spaceship. http://www.creativitycat.com ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Memory leak somewhere?
Does it help if you add a call to plt.clf() to the bottom of the loop? The pyplot interface keeps a reference around to every figure created until they are destroyed so that it can be obtained again by number (this is functionality inspired by matlab). Alternatively, you can use the object-oriented interface to create the figure, which does not have this behavior, e.g., replace fig = plt.figure() with from matplotlib import figure fig = figure.Figure() If all this doesn't help, let me know and I'll look further. Cheers, Mike iCy-fLaME wrote: I was trying to use matplotlib to plot a series of 2D images, but python was using up a large amount of RAM very quickly. I don't know matplotlib that well, so the chance are I am missing something, would appreciate it if anyone can point me to the right direction. I am using: Python 2.4.3 (#1, Jan 21 2009, 01:11:33) [GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2 Example code to run in interpreter mode: from numpy import zeros x = 1651 y = 452 page = zeros((x, y)).astype('float') import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt for i in range(1000): fig = plt.figure() ax = fig.add_subplot(111) cax = ax.imshow(page, cmap=plt.cm.spectral_r, extent=(-44, 176, -30, 30), interpolation = 'bicubic', vmin = -0.003, vmax = 0.003) title = Time = %(i)0.3es) % {'i':i} ax.set_title(title,fontsize=14) fig.colorbar(cax, ticks=[-2e-3, -1e-3, 0, 1e-3, 2e-3], orientation='horizontal') fig.savefig('_tmp.' + str(i) + .png, dpi=300) ### EOF I tired to delete everything in the namespace, but the only way I can release the ram is by killing the python session. Thanks for all the helps in advance. iCy -- Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT is a gathering of tech-side developers brand creativity professionals. Meet the minds behind Google Creative Lab, Visual Complexity, Processing, iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian Group, R/GA, Big Spaceship. http://www.creativitycat.com ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Michael Droettboom Science Software Branch Operations and Engineering Division Space Telescope Science Institute Operated by AURA for NASA -- Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT is a gathering of tech-side developers brand creativity professionals. Meet the minds behind Google Creative Lab, Visual Complexity, Processing, iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian Group, R/GA, Big Spaceship. http://www.creativitycat.com ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Memory leak somewhere?
On Tue, May 26, 2009 at 7:39 AM, Michael Droettboom md...@stsci.edu wrote: Does it help if you add a call to plt.clf() to the bottom of the loop? The pyplot interface keeps a reference around to every figure created until they are destroyed so that it can be obtained again by number (this is functionality inspired by matlab). Alternatively, you can use the object-oriented interface to create the figure, which does not have this behavior, e.g., replace fig = plt.figure() with from matplotlib import figure fig = figure.Figure() If all this doesn't help, let me know and I'll look further. Cheers, Mike iCy-fLaME wrote: I was trying to use matplotlib to plot a series of 2D images, but python was using up a large amount of RAM very quickly. I don't know matplotlib that well, so the chance are I am missing something, would appreciate it if anyone can point me to the right direction. I am using: Python 2.4.3 (#1, Jan 21 2009, 01:11:33) [GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2 Example code to run in interpreter mode: from numpy import zeros x = 1651 y = 452 page = zeros((x, y)).astype('float') import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt for i in range(1000): fig = plt.figure() ax = fig.add_subplot(111) cax = ax.imshow(page, cmap=plt.cm.spectral_r, extent=(-44, 176, -30, 30), interpolation = 'bicubic', vmin = -0.003, vmax = 0.003) title = Time = %(i)0.3es) % {'i':i} ax.set_title(title,fontsize=14) fig.colorbar(cax, ticks=[-2e-3, -1e-3, 0, 1e-3, 2e-3], orientation='horizontal') fig.savefig('_tmp.' + str(i) + .png, dpi=300) This code creates 1000 different figures -- either reuse the same figure and clear it as Michael suggests fig = plt.figure(1) # by putting 1 here you reuse the same fig fig.clf() # and clear it or close the figure in the loop fig = plt.figure() # draw and save here plt.close(fig) JDH -- Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT is a gathering of tech-side developers brand creativity professionals. Meet the minds behind Google Creative Lab, Visual Complexity, Processing, iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian Group, R/GA, Big Spaceship. http://www.creativitycat.com ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users