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:


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

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.

Gostou deste post? Assine gratuitamente o conteúdo e receba as atualizações por e-mail.

E-mail:




View Comments ao post “Utilizando Matplotlib/pylab com Django”

  1. WordPress 2.3.1 XML-RPC

    [...] uso é muito mais simples que uma Matplotlib e a saída acaba sendo mais atraente para um usuário final. O módulo Python chama-se pygooglechar [...]

  2. Arc says:

    Firefox 3.0.5 Windows XP

    Fantastic sample of code, works even better than cookbook/matplotlib/django

  3. Firefox 3.0.6GTB5 Ubuntu

    Hi,
    thank you for you post. It worked for my with Django, Ubuntu, but I added some code lines, because I got this error first:
    Failed to create /var/www/media/.matplotlib; consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data

    Then, I added this lines:
    def chart(request):
    import os
    import dbus
    os.environ['HOME'] = ‘/var/www/media’
    ….
    from PIL import Image as PILImage
    and the the chart was showed fine :)
    Thank you again, I’ll post too about it in my blog

  4. WordPress MU XML-RPC

    [...] followed the post of Christiano Anderson about Django and MatPlotLib and I got some issue, but I fix. Here show [...]

Deixe um comentário

blog comments powered by Disqus
Get Adobe Flash playerPlugin by wpburn.com wordpress themes