Mostrar gráficos de Matplotlib en Django

Algo que me piden algunos alumnos del curso de Django, es si es posible generar gráficos en Python y mostrarlos en un template.

La respuesta es sí, pero es un poco lioso porque hace falta “renderizar” el canvas de las figuras de Matplotlib sobre un buffer de bytes.

No voy a enseñar nada de Matplotlib porque eso es harina de otro costal (aquí dejo mis apuntes online), pero sí el proceso para mostrar el gráfico.

Creando una vista generadora

La idea de mostrar gráficos con Django se basa en acceder a una url de nuestro proyecto, por ejemplo /plot/, y en lugar de renderizar un template, responder con la imagen del gráfico generada en tiempo de ejecución:

Al acceder a la URL que genera el gráfico, ésta devuelve una imagen PNG en lugar de un documento HTML.

El snippet para la vista de Django sería el siguiente:

Esto nos generaría el gráfico que os muestro en la imagen de arriba, que cambiará cada vez que recargamos la página con F5 porque contiene datos aleatorios tomados del módulo random.

Lo bueno es que podemos insertar esta URL como si fuera una imagen:

Quedando finalmente la página principal de la siguiente forma:

Si a esta idea le sumamos parámetros, ya sea por GET o POST que podemos capturar en la vista, entonces podemos añadir dinamismo y generar los gráficos como nosotros queramos. Por ejemplo pasando un parámetro GET llamado type (/plot/?type=1) donde luego con request.GET.get[‘type’] podamos seleccionar el tipo de gráfico o lo que se os ocurra.

He creado este repositorio en Github donde está el código por si alguien quiere revisarlo, espero que os sirva.

https://www.hektorprofe.net/