2009-12-09 18 views
17

De algunos ejemplos de Internet hice el código de prueba a continuación. ¡Funciona!¿Cómo usar Matplotlib en Django?

... PERO si vuelvo a cargar la página, el pastel se dibujará con la misma imagen. Algunas partes se oscurecen cada vez que vuelvo a cargar la página. Cuando reinicio el servidor de desarrollo, se restablece. ¿Cómo dibujo correctamente con Matplotlib en Django? Parece que recuerda algunos dibujos ...

Fuente views.py (deje enlace urls.py a él):

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 

estoy usando Django y Python 1.0.1 2.6.2 (Linux) .

Respuesta

24

Debe eliminar el parámetro num de figure constructor y close la figura cuando haya terminado con ella.

import matplotlib.pyplot 

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

Al eliminar el parámetro num, evitará el uso de la misma figura, al mismo tiempo. Esto podría suceder si 2 navegadores solicitan la imagen al mismo tiempo. Si esto no es un problema, otra posible solución es utilizar el método clear, es decir, f.clear().

+0

¡Muchas gracias! ¡Funciona según lo deseado! –

+0

Explicación en [este video] (https://youtu.be/ZmYPzESC5YY?t=5m8s) también puede ser útil. – J0ANMM