How to use Matplotlib in Django?


Question

From some examples from the Internet I made the test code below. It works!

... BUT if I reload the page, the pie will draw itself with the same image. Some parts get darker every time I reload the page. When I restart the the development server, it is reset. How do I draw properly with Matplotlib in Django? It looks like it remembers some drawings...

Source views.py (let urls.py link to it):

from pylab import figure, axes, pie, title
from matplotlib.backends.backend_agg import FigureCanvasAgg

def test_matplotlib(request):
    f = figure(1, figsize=(6,6))
    ax = axes([0.1, 0.1, 0.8, 0.8])
    labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
    fracs = [15,30,45, 10]
    explode=(0, 0.05, 0, 0)
    pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
    title('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})

    canvas = FigureCanvasAgg(f)    
    response = HttpResponse(content_type='image/png')
    canvas.print_png(response)
    return response

I am using Django 1.0.1 and Python 2.6.2 (Linux).

1
20
10/19/2014 7:35:55 AM

Accepted Answer

You need to remove the num parameter from the figure constructor and close the figure when you're done with it.

import matplotlib.pyplot

def test_matplotlib(request):
    f = figure(figsize=(6,6))
    ....
    matplotlib.pyplot.close(f)

By removing the num parameter, you'll avoid using the same figure at the same time. This could happen if 2 browsers request the image at the same time. If this is not an issue, another possible solution is to use the clear method, i.e. f.clear().

26
12/9/2009 4:13:49 PM

1.save picture which created by matplotlib
for example:plt.savefig('./app1/static/visualize.png') 2.use the picture in your html code for example:

about django how to use static variable(like picture and js file) you can refer to django document


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon