Gerando Gráficos com PHP
Bom dia Povo. :natalw00t: (natal está longe... não ? <_< )
Hoje vou mostrar como gerar gráfico com PHP, muito útil para relatórios, etc...
Vamos utilizar a class PHPLot 5 Façam o download da biblioteca.
Hierarquia de arquivos e pastas:
Criem uma pasta intitulada graficos dentro dela criem uma pasta chamada "classes"... extraia todo
conteúdo do phplote para dentro da pasta classes. Criem um arquivo chamado mysql.class.php e
deixe-o dentro da pasta classes também.
Agora vamos a modelagem da base de dados, fiz como exemplo um relatório em gráficos para a
quantidade de votos que cada candidato recebeu na campanha. Criem um banco de dados de nome:
graficosphp
Agora vamos a estrutura de nossa tabela.
-- Estrutura da tabela candidatos
--
CREATE TABLE IF NOT EXISTS candidatos (cand_id smallint(6) NOT NULL AUTO_INCREMENT,cand_nome varchar(40) NOT NULL DEFAULT 'Seu fulano',cand_votos float(12,2) unsigned NOT NULL DEFAULT '0.00',
PRIMARY KEY (cand_id),
UNIQUE KEY cand_nome (cand_nome)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
--
-- Extraindo dados da tabela candidatos
--
INSERT INTO candidatos (cand_id, cand_nome, cand_votos) VALUES
(1, 'Seu fulano', 5000.00),
(2, 'Alaerte Gabriel', 10000.00),
(3, 'Shini', 20000.00),
(4, 'Bruno Augusto', 30000.00);
Bom, para que está iniciando e tem dúvidas do que seja um campo do tipo FLOAT(12,2) por exemplo, sugiro ler este tópico:
:seta: http://forum.imasters.com.br/topic/191441-escolhendo-um-tipo-de-campo-correto/
Agora, vamos a class mysql.class.php que eu criei para poder fazer esse exemplo simples.
<?php
class mysql {
private $mysqli;
protected $inf = array('localhost','user','senha','banco de dados');
protected function constantes()
{
if(!defined('HOST') and !defined('USU') and !defined('SENHA') and !defined('DB'))
{
define('HOST' ,$this->inf[0]);
define('USU' ,$this->inf[1]);
define('SENHA',$this->inf[2]);
define('DB' ,$this->inf[3]);
}
}
public function conect()
{
if(extension_loaded('mysqli'))
{
$this->constantes();
$this->mysqli = new mysqli(HOST,USU,SENHA,DB);
if(mysqli_connect_errno())
{
print('Falha na conexão:'. mysqli_error());
}
}else{
die('Extensão do MySQL não carregada.');
}
}
public function fechar(){
return $this->mysqli->close();
}
public function exe($sql){
$this->conect();
return $this->mysqli->query($sql);
$this->fechar();
}
}
?>
Feito isso, salve a class dentro da pasta classes que criamos.
Agora vamos ao que interessa.
com o PHPLOT nós temos várias opções e exemplos de gráficos, eu escolhi 2 simples que é o formato
PIZZA e com BARRAS, de modo simples que o tutorial não fique grande de mais.
criem o seguinte arquivo:
grafico-barra.php
<?php
//Chamamos a class do MySQL que criamos
require_once 'classes/mysql.class.php';
//chamamos a class phpLOT
require_once 'classes/phplot.php';
//instanciando a class php lot e mysql
$plot = new PHPlot();
$con = new mysql();
//selecionand os dados da tabela para geração dos gráficos
$buscar = $con->exe("SELECT * FROM candidatos");
//Definindo o array.
$data = array();
/*
Muita atenção nessa parte, pois se não fizer dessa forma, você não vai conseguir o loop perfeito para trazer
todos os dados da tabela, deixem exatamente como está, pois o PHPLOT trabalha com VETORES.
*/
while($ver = $buscar->fetch_array())
{
$data[] = array($ver['cand_nome'],$ver['cand_votos']);
}
//Aqui nos temos a propriedades da class phplot, podemos definir a cor dos textos de nosso gráfico
$plot->SetTextColor('blue');
#$plot->SetTickLabelColor('red');//Aqui nos temos a propriedades da class phplot, podemos definir a cor do título de nosso gráfico
$plot->SetTitleColor('blue');
#$plot->SetDataLabelColor('red');//aqui nos definimos a cor da exibição da quantidade de votos, coloquei vermelho
$plot->SetDataValueLabelColor('red');
//tipo da borda da imagem
$plot->SetImageBorderType('plain');
//Aqui os definimos qual o tipo de gráfico que nos queremos, se pizza ou barras, ou linhas etc.
$plot->SetPlotType('bars');
$plot->SetDataType('text-data');
$plot->SetDataValues($data);// Aqui nos definimos o título do gráfico
$plot->SetTitle("Quantidade real dos votos até o presente momento");
Turn off X tick labels and ticks because they don't apply here:
#$plot->SetXTickLabelPos('none');
$plot->SetXTickPos('none');
Make sure Y=0 is displayed:
$plot->SetPlotAreaWorld(NULL, 0);Y Tick marks are off, but Y Tick Increment also controls the Y grid lines:
$plot->SetYTickIncrement(100);Turn on Y data labels:
$plot->SetYDataLabelPos('plotin');With Y data labels, we don't need Y ticks or their labels, so turn them off.
#$plot->SetYTickLabelPos('none');
#$plot->SetYTickPos('none');
//Gerando o gráfico
$plot->DrawGraph();
?>
Bom pessoal é bem simples, caso queira estudar a fundo todas os métodos/objetos da class basta acessarem o site e seus exemplos. Este exemplo acima irá nos gerar um gráfico de barras.
:seta: http://www.phplot.com/phplotdocs/
Agora vamos ao gráfico em forma de pizza, isso mesmo, aquele dividido e redondo :graduated:
Criemos o arquivo: grafico-pie
grafico-pie.php
<?php
require_once 'classes/mysql.class.php';
//Include the code
require_once 'classes/phplot.php';
//Define the object
$plot = new PHPlot();
$con = new mysql();
$buscar = $con->exe("SELECT * FROM candidatos");
$data = array();
while($ver = $buscar->fetch_array())
{
$data[] = array($ver['cand_nome'],$ver['cand_votos']);
}
$plot->SetTitleColor('blue');
$plot->SetTitle("Quantidade real dos votos até o presente momento");
$plot->SetImageBorderType('plain');
#$plot->SetBackgroundColor('YellowGreen');
$plot->SetPlotType('pie');
$plot->SetDataType('text-data-single');
$plot->SetDataValues($data);
foreach ($data as $row) $plot->SetLegend($row[0]); // Copy labels to legend
$plot->DrawGraph();
?>
É basicamente a mesma coisa, mudando alguns métodos percebam que mudei o parâmetro do objeto: $plot->SetPlotType(); de BARS para PIE, ou seja de barras para PIZZA. Que é um pouco menor para se configurar, mais que seguem basicamente as mesmas regras.
Certo Alaerte, mais até agora não vi como EXIBIR esses gráficos... acessando a página direto não da certo...
OK, vamos agora a nossa index.php responsável por mostrar os 2 gráficos, muuito simples, façamos:
index.php
<p>Gráfico como Pizza</p>
<p><img src="grafico-pie.php" title="teste" /></p>
<p> </p>
<p>Gráfico como Barras</p>
<p><img src="grafico-barra.php" title="teste" /></p>
Nada mais... muito simples pessoal... acessem o site que passei e estudem caso queiram algo complexo. Abraços. :graduated:
RESULTADO: /applications/core/interface/imageproxy/imageproxy.php?img=http://alaertegabriel.com.br/arquivos/graficos.jpg&key=dd82700500690703eae012c3b24c37ba62429372418caecc61468b8383c0adaa" alt="graficos.jpg" />
Discussão (3)
Carregando comentários...