Hay una receta en el Matplotlib Cookbook que hace exactamente esto. En su núcleo, se ve así:
def simple(request):
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
fig=Figure()
ax=fig.add_subplot(111)
ax.plot(range(10), range(10), '-')
canvas=FigureCanvas(fig)
response=django.http.HttpResponse(content_type='image/png')
canvas.print_png(response)
return response
Ponlo en tu archivo de visitas, apunta tu URL hacia él, y estarás en funcionamiento.
Editar: Como se señaló, esta es una versión simplificada de una receta en el libro de cocina. Sin embargo, parece que hay una diferencia entre llamar a print_png
y savefig
, al menos en la prueba inicial que hice. Llamando fig.savefig(response, format='png')
dio una imagen que era más grande y tenía un fondo blanco, mientras que el original canvas.print_png(response)
dio una imagen ligeramente más pequeña con un fondo gris. Por lo tanto, reemplazaría las últimas líneas de arriba con:
canvas=FigureCanvas(fig)
response=django.http.HttpResponse(content_type='image/png')
fig.savefig(response, format='png')
return response
Aún necesita tener el lienzo instanciado.
Hay algunas otras sugerencias que parecen funcionar, pero DEFINITIVAMENTE esta parece ser la más fácil de usar. ¡Solo tengo que agregar alrededor de 2 o 3 líneas de código! Thank-You – DarwinSurvivor