Criação de sites, softwares e sistemas inteligentes.

Gráficos em PHP com a biblioteca PHPlot

Começamos a série de artigos com ênfase na linguagem de programação PHP.
O nosso primeiro artigo vai tratar do PHPlot, que é uma biblioteca de criação de gráficos. Com ela nós podemos criar diferentes tipos de gráficos, tais como:

  • pizza
  • linhas
  • linhas e pontos
  • barras
  • entre outros...

Para este artigo estamos usando o PHP5 com a extensão GD instalada e habilitada. O PHPlot utilizado está na versão 5.5.0.
Para quem tem a necessidade de utilizar a biblioteca com o PHP antigo (PHP4), ele só funciona nas versões 4.3.0 e 4.4.7, e com o PHPlot 5.0.4 e anteriores.
O suporte ao PHPlot só abrange as versões que atendem ao PHP5 (PHPlot 5.0.5 e superiores).
O site oficial da biblioteca PHPlot é http://sourceforge.net/projects/phplot/.

Chega de conversa e vamos para a munheca! Você também pode baixar o exemplo do artigo aqui

Abaixo temos a nossa index.html, que será a página de visualização do gráfico.

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Gráficos em PHP com a biblioteca PHPlot</title>
    </head>
    <body>
        
            <fieldset>
                 <img src="/caminho_do_arquivo/getGraph.php" alt="Índice de Fecundidade Brasileira 1940-2000" title="Índice de Fecundidade Brasileira 1940-2000" />
             </fieldset>         
             

                 Dados do gráfico extraidos do <a href="http://www.ibge.gov.br/ibgeteen/pesquisas/fecundidade.html">site IBGE</a> 
                      
        
    </body>
</html>

Em seguida nós temos o arquivo getGraph.php responsável pela criação do gráfico

getGraph.php

<?php
// requisição da classe PHPlot
require_once 'phplot.php';
 
// Array com dados de Ano x Índice de fecundidade Brasileira 1940-2000
// Valores por década
$data = array(
             array('1940' , 6.2 ), 
             array('1950' , 6.2 ),
             array('1960' , 6.3 ),
             array('1970' , 5.8 ),
             array('1980' , 4.4 ),
             array('1991' , 2.9 ),
             array('2000' , 2.3 )
             );     
# Cria um novo objeto do tipo PHPlot com 500px de largura x 350px de altura                 
$plot = new PHPlot(500 , 350);     
 
// Organiza Gráfico -----------------------------
$plot->SetTitle('Taxa de fecundidade no Brasil 1940-2000');
# Precisão de uma casa decimal
$plot->SetPrecisionY(1);
# tipo de Gráfico em barras (poderia ser linepoints por exemplo)
$plot->SetPlotType("bars");
# Tipo de dados que preencherão o Gráfico text(label dos anos) e data (valores de porcentagem)
$plot->SetDataType("text-data");
# Adiciona ao gráfico os valores do array
$plot->SetDataValues($data);
// -----------------------------------------------
 
// Organiza eixo X ------------------------------
# Seta os traços (grid) do eixo X para invisível
$plot->SetXTickPos('none');
# Texto abaixo do eixo X
$plot->SetXLabel("Fonte: Censo Demográfico 2000, Fecundidade e Mortalidade Infantil, Resultados\n Preliminares da Amostra IBGE, 2002");
# Tamanho da fonte que varia de 1-5
$plot->SetXLabelFontSize(2);
$plot->SetAxisFontSize(2);
// -----------------------------------------------
 
// Organiza eixo Y -------------------------------
# Coloca nos pontos os valores de Y
$plot->SetYDataLabelPos('plotin');
// -----------------------------------------------
 
// Desenha o Gráfico -----------------------------
$plot->DrawGraph();
// -----------------------------------------------
?>

Se todos os passos foram realizados corretamente, acessando a index.html no seu navegador preferido, vamos obter o gráfico abaixo, cujo os dados foram retirados da página http://www.ibge.gov.br/ibgeteen/pesquisas/fecundidade.html sobre a "taxa de fecundidade no Brasil 1940/2000"

taxa de fecundidade no Brasil 1940/2000

Espero que o artigo tenha ajudado a conhecer esta biblioteca fantástica!
Qualquer dúvida ou sugestão não deixe de comentar.
Até breve!

Última modificação emTerça, 23 Setembro 2014 13:05
CGM

A CGM é uma empresa especializada em desenvolvimento de projetos de informática e sistemas personalizados.

A sólida parceria desenvolvida com seus clientes na última década atestam a vocação da CGM Automação no desenvolvimento de programas específicos com o que é de mais moderno em informática. Nossos profissionais comprovam uma longa experiência profissional, que é compartilhada com cada um de nossos clientes.

Website.: www.cgmautomacao.com.br

Itens relacionados (por tag)

Mais nesta categoria: Animação de Menu com jQuery »

Comentários  

0 # Calebe Teixeira 10-01-2012 19:21
Gostei ja vou usar, para um cliente!
Ótimo artigo.
Responder | Responder com citação | Citar
0 # rairo 28-05-2012 12:28
show de bola...
Responder | Responder com citação | Citar
0 # Robson 13-06-2012 19:06
Boa tarde, como eu faço para aumentar o tanmanho do eixo y, o seu vai de 2 a 7. como eu faço pra ficar de 2 a 15 e como eu defino esse intervalo.?

obrigado
Responder | Responder com citação | Citar
0 # Raphael 13-06-2012 21:16
Boa tarde Robson,
Para configurar a área de apresentação do gráfico, é utilizado o método SetPlotAreaWorld da classe PHPlot, ficando assim:
$plot->SetPlotAreaWorld(NULL, 2, NULL, 15);
Qualquer dúvida, estamos aew!
Responder | Responder com citação | Citar
+1 # Robson 14-06-2012 00:07
Muito obrigado, vlw pela dica, deu certo aqui!
Responder | Responder com citação | Citar
0 # wilker 20-06-2012 18:16
Cara como eu faria pra implemental-lo com um banco de dados?
Responder | Responder com citação | Citar
0 # Raphael 20-07-2012 12:10
Bom dia Wilker!
para associar o uso do PHPlot com banco de dados, é simples, é só atribuir à variável $data os dados de consulta oriundos da base de dados. Pode ser usado também arquivos .xml, .json...
Responder | Responder com citação | Citar
0 # Igor 20-07-2012 17:36
Cara, seguinte tentei implementar com um bd, só que quando chamo o gráfico ele me mostra como se não fosse possível carregar a imagem. Teria alguma forma de falar com você?
Responder | Responder com citação | Citar
0 # Raphael 23-07-2012 19:47
Pode perguntar por aqui mesmo, pois a sua dúvida pode ser a de outros. :lol:
Responder | Responder com citação | Citar
0 # Thadeu 09-10-2012 19:26
Prezado Raphael,

Boa Tarde.

Tenho um arquivo txt por minuto no formato abaixo:

HH:MM VALOR
00:00 1.2
00:01 1.234
00:02 1.5
até
23:50 10.9

Só consigo mostrar o eixo X em minutos e gostaria de mostrar o resultado em horas.

Exemplo eixo X: 00 01 02 .... 23

Como devo proceder ?

Att,

Thadeu
Responder | Responder com citação | Citar
0 # Raphael 10-10-2012 15:04
Bom dia Thadeu!

Deixa-me ver se compreendi a sua questão!
Você possui um arquivo .txt onde nele a cada linha possui um seguinte texto "H:m VALOR"
Exemplo arquivo.txt:
00:00 1.5
00:01 1.9
...
23:50 10.6

Tomando como base o exemplo dado aqui no site, vamos simplesmente alterar o valor da variável array "$data" em getGraph.php

/*
$data = array(
array('1940' , 6.2 ),
array('1950' , 6.2 ),
array('1960' , 6.3 ),
array('1970' , 5.8 ),
array('1980' , 4.4 ),
array('1991' , 2.9 ),
array('2000' , 2.3 )
);
*/

Adicione o seguinte código abaixo da variável "$data" que foi comentada:

// Endereco do arquivo.txt
$txt = 'arquivo.txt';
if(file_exists($txt)){
$data = array();
$arquivo = fopen($txt , 'r');
while(!feof($arquivo)){
$linha = fgets($arquivo , 4096);
// Aqui é feito uma quebra da linha considerando que só exista 1 espaço entre "H:m Valor"
$explodeDados = explode(' ' , $linha);
$data[] = array($explodeDados[0] , (float)$explodeDados[1]);
}
fclose($arquivo);
}
else{
echo 'Arquivo não existe';
}

Teste este bloco de código e faça as alterações necessárias para a sua realidade.
Responder | Responder com citação | Citar
0 # Guest 24-09-2013 14:05
Bom dia Raphael,

Estou tentando plotar gráficos em uma aplicação minha em php. Problema: Não consigo instanciar a classe nas minhas páginas. Já tentei criar uma classe com o exemplo para poder passar por parametro a array, mas nem assim. Como é que eu crio uma array dinámica com dados oriundos do banco e "jogo" dentro do aquivo de ploter.

Agradeço a atenção ae!
Responder | Responder com citação | Citar
0 # Raphael 26-09-2013 12:55
1 - Instanciar classe PHPlot: você pode instanciar direto, por diretórios require_once '/diretorio/do/phplot/phplot.php'; , ou adicionar o diretório onde está o arquivo ao include_path no php.ini ou .htaccess.
NOTA: é necessário ter permissão ao diretório onde se encontra o arquivo phplot.php.

Faça isto primeiro e utilize o código fornecido de exemplo no artigo, caso tenha algum erro durante este primeiro processo, cole ele aqui dizendo o que você fez.

Se der certo, responda o post com a estrutura da tabela do banco de dados onde estão os dados para formar o gráfico.
Responder | Responder com citação | Citar
0 # Guest 04-12-2013 12:46
muito bom
Responder | Responder com citação | Citar
0 # Guest 06-01-2014 12:23
Bom dia, estou usando o seu tutorial de grafico em uma página web minha, só que eupreciso fazer um href nela e não consigo, usei vários metodos, e não deu certo, se vc tiver uma luz seria de muito agrado.
Responder | Responder com citação | Citar
0 # Raphael 07-01-2014 12:13
O href pode ser colocado normalmente, na index.html cujo cabeçalho a saída é text/html.

No arquivo getGraph.php o cabeçalho é alterado para que a saída seja em formato de imagem.

Por isto é que no atributo src da imagem no arquivo index.html está o caminho do arquivo getGraph.php, pois ao executá-lo, o mesmo retorna a imagem.

O que você pode fazer para colocar códigos html no mesmo arquivo da geração do gráfico, é fazer com que
a saída não seja renderizada automaticamente com o método SetPrintImage(boolean), e renderizar com o EncodeImage()

adicione ao arquivo getGraph.php o trecho de código no link cgmautomacao.com.br/cms/artigos/comments/graficosPHP_01.txt

O gráfico não vai ser visualizado mais pela inde.html, neste caso acesse diretamente o arquivo getGraph.php pelo browser

Qualquer dúvida, não deixa de perguntar!
Responder | Responder com citação | Citar
0 # Jaspion_ti 08-01-2015 00:13
Excelente post cara. Estava procurando algo como essa classe.
Responder | Responder com citação | Citar
0 # Simone 16-04-2015 19:05
Boa tarde, Raphael,
copiei exatamente como o exemplo abaixo, mas o gráfico não aparece.
Já tentei outros exemplo e nada. Estou usando a versão phplot-6.1.0
Pode me ajudar?
Att.
Simone
Responder | Responder com citação | Citar
0 # Cleiton 06-05-2016 14:50
Top demais! fácil e rápido de entender parabéns!
Responder | Responder com citação | Citar

Adicionar comentário


Código de segurança
Atualizar