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):
- python-numpy
- python-numpy-ext
- python-matplotlib
- python-imaging
- 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:
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.