Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alaerte Gabriel

Gerando Gráficos com PHP

Recommended Posts

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: graficos.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quem receber o seguinte erro:

 

Deprecated: Function split() is deprecated

Basta ir na linha do erro, e alterar a função

 

split();

 

pela função nativa

explode();

Pois o SPLIT foi depreciada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Alaerte Gabriel

 

Primeiro gostaria de parabenizá-lo pelo Post.

Estou tentando gerar o gráfico conforme o post, porém o mesmo não aparece, no phpinfo me informa que tenho a biblioteca GD, veja as imagens do phpinfo e do arquivo grafico-barra.php, se puder ajudar fico agradecido.

 

14849403994_d9964c8c56_n.jpg

 

14665162360_bffd853a89_n.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema resolvido, eu utilizo o netbeans para programar, e estava gerando em arquivo web php e o certo seria arquivo php apenas, para nao gerar aquele deve-se usar apenas o php sem nada de html.

 

vlw obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.