memory error with matplot

L

lisa.engblom

Hi,

I am using matplotlib with python to generate a bunch of charts. My
code works fine for a single iteration, which creates and saves 4
different charts. The trouble is that when I try to run it for the
entire set (about 200 items) it can run for 12 items at a time. On the
13th, I get an error from matplotlib that says it can't access data.
However, if I start the program at the point it failed before it works
fine and will create the charts for the next 12 before failing. I
assume that I am not closing the files properly somehow or otherwise
misallocating memory. I tried just reimporting pylab each iteration,
but that didn't help. This is the function that creates a chart:

#create and save the figure
def CreateFigure(state, facility, unit, SO2, increment, year, P99):
size = len(SO2)

#Create Plot
figure(1, figsize=(10,8))
bar(range(1, size+2), SO2, width=0.1, color='k')
grid(True)
xlim(0,size)
ylim(0, 1.1*SO2[-1])
ylabel('SO2 [lb/hr]')
heading = ConstructFigName(state, facility, unit, increment, year)
title(heading)

#set handles
xticklines = getp(gca(), 'xticklines')
xgridlines = getp(gca(), 'xgridlines')
xticklabels = getp(gca(), 'xticklabels')
yticklines = getp(gca(), 'yticklines')

#set properties
setp(xticklines, visible=False)
setp(xgridlines, visible=False)
setp(xticklabels, visible=False)
setp(yticklines, visible=False)

axhspan(P99, P99, lw=3, ec='r', fc='r')
ax = gca()
#P99 = str(P99)
P99 = '%0.1f' % P99
text(0.01, 0.95, '99th Percentile: '+P99+' lb/hr',
transform=ax.transAxes)

figpath = ConstructFigPath(state, facility, unit, increment, year)
savefig(figpath)
close()

Can you see the problem?

thanks,
-Lisa
 
J

John Hunter

lisa> Hi, I am using matplotlib with python to generate a bunch of
lisa> charts. My code works fine for a single iteration, which
lisa> creates and saves 4 different charts. The trouble is that
lisa> when I try to run it for the entire set (about 200 items) it
lisa> can run for 12 items at a time. On the 13th, I get an error
lisa> from matplotlib that says it can't access data. However, if
lisa> I start the program at the point it failed before it works
lisa> fine and will create the charts for the next 12 before
lisa> failing. I assume that I am not closing the files properly
lisa> somehow or otherwise misallocating memory. I tried just
lisa> reimporting pylab each iteration, but that didn't help.
lisa> This is the function that creates a chart:

There are a couple of things to try. First, on a long shot, does it
help to do

close(1)

instead if simply close(). I don't think it will but worth a try.

Second, I think there is a small leak in the tkcanvas, but not in
matplotlib proper. Do you need to display the graphs you are
creating, or do you merely want to save them? If the latter, simply
use the Agg backend

import matplotlib
matplotlib.use('Agg')

*before* you import pylab.

Finally, if you are still having troubles, post a complete,
free-standing, script to the matplotlib mailing list and we'll see if
we can replicate it.

You may also want to take a look at the FAQ on memory leaks:

http://matplotlib.sourceforge.net/faq.html#LEAKS

JDH
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top