Utilizando Matplotlib/pylab com Django

No meu post anterior, coloquei um link para o Mashable com mais de 25 dicas de ferramentas interessantes para Python. Dentro dessas ferramentas, reencontrei uma muito interessante, que já tinha utilizado em algumas situações e me ajudou muito a fazer gráficos estatísticos.

A ferramenta é a http://matplotlib.sourceforge.net/, que cria facilmente gráficos e plotagens de diversas formas e estilos. Navegando no site, encontrei uma dica de como integrar a ferramenta no Django, tornando assim a criação de gráficos on the fly de forma bastante elegante podendo utilizar informações provenientes de um banco de dados.

Para fazer a receita funcionar, é necessário (além do Django), instalar os seguintes pacotes Python (exemplo para distribuições Ubuntu ou Debian):

  1. python-numpy
  2. python-numpy-ext
  3. python-matplotlib
  4. python-imaging
  5. python-numeric

Em seguida, basta adicionar dentro da views o seguinte código de exemplo:

<br /> from django.http import HttpResponse<br /> from django.http import HttpResponseRedirect<br /> def chart(request):<br /> from PIL import Image as PILImage<br /> from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas<br /> from matplotlib.figure import Figure<br /> from StringIO import StringIO<br /> fig = Figure()<br /> canvas = FigureCanvas(fig)<br /> ax = fig.add_subplot(111)<br /> ax.plot([3,2,5,8,4,8])<br /> ax.set_title('Teste Django')<br /> ax.grid(True)<br /> ax.set_xlabel('X')<br /> ax.set_ylabel('Y')<br /> canvas.draw()<br /> size = canvas.get_renderer().get_canvas_width_height()<br /> buf=canvas.tostring_rgb()<br /> im=PILImage.fromstring('RGB', size, buf, 'raw', 'RGB', 0, 1)<br /> imdata=StringIO()<br /> im.save(imdata, format='JPEG')<br /> response = HttpResponse(imdata.getvalue(), mimetype='image/jpeg')<br /> return response<br />

Não esqueça de criar um apontamento no urls.py para essa nova função, se der tudo certo, você deverá ver em seu navegador um gráfico parecido com o abaixo:

chart.jpeg

Pronto! O resto é só seguir o exemplo, ler a documentação dos diferentes tipos de gráfico no site do pylab e fazer o seu modelo funcionar conforme o gosto.

O módulo é muito bacana, é possível fazer plotagens em cima de mapas como no modelo abaixo:

basemap2.png

Se você for se aventurar nos mapas, será necessário instalar um módulo adicional que não vem no pacote matplotlib. O módulo extra pode ser encontrado aqui.