Skip to content

Instantly share code, notes, and snippets.

@hcosta
Last active November 29, 2018 12:30
Show Gist options
  • Save hcosta/f2a111e07ba38308fc78b89cacab7146 to your computer and use it in GitHub Desktop.
Save hcosta/f2a111e07ba38308fc78b89cacab7146 to your computer and use it in GitHub Desktop.
import io
import matplotlib.pyplot as plt
from django.http import HttpResponse
from django.shortcuts import render
from matplotlib.backends.backend_agg import FigureCanvasAgg
from random import sample
def home(request):
return render(request, "core/home.html")
def plot(request):
# Creamos los datos para representar en el gráfico
x = range(1,11)
y = sample(range(20), len(x))
# Creamos una figura y le dibujamos el gráfico
f = plt.figure()
# Creamos los ejes
axes = f.add_axes([0.15, 0.15, 0.75, 0.75]) # [left, bottom, width, height]
axes.plot(x, y)
axes.set_xlabel("Eje X")
axes.set_ylabel("Eje Y")
axes.set_title("Mi gráfico dinámico")
# Como enviaremos la imagen en bytes la guardaremos en un buffer
buf = io.BytesIO()
canvas = FigureCanvasAgg(f)
canvas.print_png(buf)
# Creamos la respuesta enviando los bytes en tipo imagen png
response = HttpResponse(buf.getvalue(), content_type='image/png')
# Limpiamos la figura para liberar memoria
f.clear()
# Añadimos la cabecera de longitud de fichero para más estabilidad
response['Content-Length'] = str(len(response.content))
# Devolvemos la response
return response
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment