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):
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:

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:

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.
[...] 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 [...]
Fantastic sample of code, works even better than cookbook/matplotlib/django
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
[...] followed the post of Christiano Anderson about Django and MatPlotLib and I got some issue, but I fix. Here show [...]