Hi,
I am using matplotlib first time and I am wonder how to free resources
I have this script
# coding: utf-8
import matplotlib
matplotlib.use('Agg')
import pylab
class Graph:
def __init__(self):
# sirka stlpcov
self.width = 0.5
self.font = {'fontname':'Tahoma', 'fontsize':10}
def setTitle(self, title):
"""Nastavi nadpis grafu
"""
self.title = title
def setXLabel(self, label):
self.x_label = label
def setYLabel(self, label):
self.y_label = label
def setYValues(self, values):
"""Nastavi y-ove hodnoty
"""
self.y_values = values
# vypocitame lave spodne rohy stlpcov
self.x_values = [x + self.width / 2 for x in range(len(self.y_values))]
# vypocitame stred stlpcov (znacky na x-ovej osi)
self.x_ticks = [x + self.width for x in range(len(self.y_values))]
def setXTickLabels(self, labels):
"""Nastavi popisky pre ciarky na x-ovej osi
"""
self.x_ticksLabels = labels
def makeGraph(self):
self.fig = pylab.figure()
self.fig.set_dpi(72)
self.fig.set_figheight(3)
self.fig.set_figwidth(5)
self.fig.subplots_adjust(bottom=0.15)
self.ax = self.fig.add_subplot(111)
self.ax.bar(left=self.x_values, height=self.y_values,
width=self.width, color='#f00000')
self.ax.set_xticks(self.x_ticks)
self.ax.set_xticklabels(self.x_ticksLabels)
self.ax.set_xlabel(self.x_label, **self.font)
self.ax.set_ylabel(self.y_label, **self.font)
self.ax.set_title(self.title, **self.font)
def saveGraph(self, path):
self.fig.savefig(path, format='png')
def __del__(self):
self.fig.delaxes(self.ax)
del self.fig
del self.ax
if __name__ == '__main__':
import random
import gc
for i in range(5000):
g = Graph()
g.setTitle(u'Spotreba za rok 2008 podľa ATC skupín')
g.setXLabel(u'ATC skupiny')
g.setYLabel(u'Spotreba v EUR')
g.setYValues([random.randint(0, x) for x in range(20)])
g.setXTickLabels([chr(random.randint(65, 90)) for x in range(20)])
g.makeGraph()
g.saveGraph('grafy/' + str(i) + '.png')
del g
print gc.get_count()
gc.collect()
print gc.get_count()
When I used TkAgg, it crashes after 190 images (Fail to create pixmap
with Tk_GetPixmap in ImgPhotoInstanceSetSize. tried to delete photo
image when instances still exist).
When I switch to WX, it crashes after 400 images.
And Agg crashes when pagefile reaches 1.5x ram (cca 2000 images).
It is possible somehow free resources in matplotlib?
I use python 2.5.4, wx 2.8.9.2, numpy 1.3.0b1 on win XP
Thanks for answers.
Stano.