Matplotlib - an odd problem

Jean-Paul Calderone exarkun at divmod.com
Wed Jun 24 17:55:12 EDT 2009


On Wed, 24 Jun 2009 11:38:02 -0700 (PDT), koranthala <koranthala at gmail.com> wrote:
>Hi,
>I am using Matplotlib with Django to display charts on the web page.
>I am facing an odd problem in that, everytime I do a refresh on the
>web page, the image darkens - and the text becomes little unreadable.
>5/6 refreshes later, the text becomes completely unreadable.
>Since I am using Django test server, the same process is being used.
>i.e. every refresh does not create a new process. When I tried killing
>the process, the image again cleared.
>So I think it is sort of memory leak or a saved value which is messing
>up something.
>But I cannot seem to find the issue at all.
>
>The code is as follows -
>
>import pylab
>from cStringIO import StringIO
>
>def print_pie_chart(request):
>    labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
>    data = [15,30,45, 10]
>    pylab.figure(1, figsize=(2,2))
>    ax = pylab.axes([0.1, 0.1, 0.8, 0.8])
>    pylab.pie(data, explode=None, labels=labels, autopct='%1.1f%%',
>shadow=True)
>    out = StringIO()
>    pylab.savefig(out, format="PNG")
>    out.seek(0)
>    response = HttpResponse()
>    response['Content-Type'] = 'image/png'
>    response.write(out.read())
>    return response
>
>Can anyone help me out here?


Your code redraws over the same graph over and over again.  You need to
create a new graph each time you want to draw something new.  It took me
ages (and help) to figure out how the non-global APIs in matplotlib.

Here's an example:

  from matplotlib.figure import Figure
  from matplotlib.axes import Axes
  from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas

  fig = Figure(figsize=(9, 9), dpi=100)
  axe = Axes(fig, (0, 0, 1.0, 1.0))
  axe.pie(range(5))
  fig.add_axes(axe)

  canvas = FigureCanvas(fig)
  canvas.set_size_request(640, 480)

  fig.savefig("foo.png")

Hope this helps,
Jean-Paul



More information about the Python-list mailing list