Подтвердить что ты не робот

Как использовать Matplotlib в Django?

Из некоторых примеров из Интернета я сделал тестовый код ниже. Оно работает!

... НО, если я перезагружу страницу, пирог будет рисовать себя с тем же изображением. При загрузке страницы некоторые части становятся темнее. Когда я перезапускаю сервер разработки, это reset. Как правильно рисовать с помощью Matplotlib в Django? Похоже, что он помнит некоторые рисунки...

Source views.py(пусть ссылка urls.py):

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

Я использую Django 1.0.1 и Python 2.6.2 (Linux).

4b9b3361

Ответ 1

Вам нужно удалить параметр num из конструктора фигур и close, когда вы закончите с ним.

import matplotlib.pyplot

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

Удалив параметр num, вы избежите одновременного использования одного и того же рисунка. Это может произойти, если два браузера запросят изображение одновременно. Если это не проблема, другое возможное решение заключается в использовании метода clear, т.е. f.clear().