0

como gerar um jpgraph de multiplas linhas no mysql

criado por Mateus da Silva Pessanha em 09/02/2011 5:15pm
Pessoal,
Estou tendo problemas para plotar na tela um gráfico de multiplas linhas gerado pela biblioteca jpgraph com base de dados mysql.
Abaixo seque o código:

require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_line.php');
include('conexao.php');

$sql_chart_1 = "select
desc_canal as canal,
round((coalesce((qt_venda_mail / qt_contatado), NULL, 0) - coalesce((qt_venda_gc / qt_envio_gc), NULL, 0)) * 100, 2) as tx_conv_real,
dt_primeiro_contato
from tabela
group by canal, dt_primeiro_contato";

$consulta_chart_1 = $sql_chart_1;

$res_chart_1 = mysql_query( $consulta_chart_1 )
or die('Não executou a query: ' . mysql_error());

if ( $row_chart_1 = mysql_fetch_assoc($res_chart_1) or die(mysql_error()) ) {
do {
$canal_chart_1[] = $row_chart_1['canal'];
$tx_conv_real_chart_1[] = $row_chart_1['tx_conv_real'];
$dt_primeiro_contato_chart_1[] = $row_chart_1['dt_primeiro_contato'];
} while ( $row_chart_1=mysql_fetch_assoc($res_chart_1) );
}

// Setup the graph
$graph_chart_1 = new Graph(450,200);
$graph_chart_1->SetScale("textlin");

$theme_class_chart_1=new UniversalTheme;

$graph_chart_1->SetTheme($theme_class_chart_1);
$graph_chart_1->img->SetAntiAliasing(false);
$graph_chart_1->title->Set('Resultado de Campanhas (Fonte DBM)');
$graph_chart_1->SetBox(false);

$graph_chart_1->img->SetAntiAliasing();

$graph_chart_1->yaxis->HideZeroLabel();
$graph_chart_1->yaxis->HideLine(false);
$graph_chart_1->yaxis->HideTicks(false,false);

$graph_chart_1->xgrid->Show();
$graph_chart_1->xgrid->SetLineStyle("solid");
$graph_chart_1->xaxis->SetTickLabels($dt_primeiro_contato_chart_1);
$graph_chart_1->xgrid->SetColor('#E3E3E3');

// Create the first line

while($row_chart_1 = mysql_fetch_array($res_chart_1)) {
$num_rows_chart_1 = mysql_num_rows($res_chart_1);
for ($i = 0; $i <= $num_rows_chart_1; $i++) {
$p1_chart_1[$i] = new LinePlot(0,$tx_conv_real_chart_1[$i]);
$graph_chart_1->Add($p1_chart_1[$i]);
$p1_chart_1[$i]->SetLegend($canal_chart_1[$i]);
$p1_chart_1[$i]->value->Show();
}
}

$graph_chart_1->legend->SetFrameWeight(1);

// Output line
$graph_chart_1->Stroke();

Lista de Respostas:

0
12/02/2011 12:02am
(~13 anos atrás)
Mateus, é complicado avaliar seu código assim. Ninguém sabe qual é, e como é o seu BD. E você não falou exatamente qual é o problema. Imagino que a pergunta deveria ser postada nos fóruns de perguntas.

Mas para ajudar, sugiro que faça as consultas no BD e mostre o resultado com "echo" e não plote o gráfico. Se tudo que está exibindo está corrento, use as funções para plotar. Faça aos poucos.

0
14/02/2011 4:44pm
(~13 anos atrás)
Rubens, obrigado pela help.
Segue abaixo algumas informações sobre o código:

Consulta SQL:

$consulta_chart_1 = "select
desc_canal as canal,
round((coalesce((qt_venda_mail / qt_contatado), NULL, 0) - coalesce((qt_venda_gc / qt_envio_gc), NULL, 0)) * 100, 2) as tx_conv_real,
dt_primeiro_contato
from
(
select
d.desc_canal,
sum(case when a.ind_gc = '0' then a.qtd_registros else 0 end) as qt_envio_mail,
sum(case when a.ind_gc = '1' then a.qtd_registros else 0 end) as qt_envio_gc,
sum(case when a.ind_gc = '0' and a.grupo = 'Não Trabalhado' then 0 else a.qtd_registros end) as qt_util,
sum(case when a.ind_gc = '0' and a.grupo in('Agendamento','Venda','Não Venda') then a.qtd_registros else 0 end) as qt_contatado,
sum(case when a.ind_gc = '0' and a.grupo = 'Venda' then a.qtd_registros else 0 end) as qt_venda_mail,
sum(case when a.ind_gc = '1' and a.grupo = 'Venda' then a.qtd_registros else 0 end) as qt_venda_gc,
date_format(b.dt_primeiro_contato, '%Y%m') as dt_primeiro_contato
from
db_dbma_web.tb_res_leads a,
db_dbma_web.tb_mailing b,
db_dbma_web.tb_jobs c,
db_dbma_web.depara_canal d
where
a.cod_mailing = b.cod_mailing and
b.cod_job = c.cod_job and
c.cod_canal = d.cod_canal
and A.regiao = 3 group by
8,1
) as tabres
group by
3,1
order by 3,1";

Resultado da Consulta:

canal | tx_conv_real | dt_primeiro_contato
ATD | -97.76 | 201007
Televendas | -9.87 | 201102
ATD | -47.76 | 201008
Televendas | -4.87 | 201103
ATD | -07.76 | 201009
Televendas | -0.87 | 201104
ATD | 47.76 | 201010
Televendas | 4.87 | 201105

Meu problema:
No lugar de plotar uma linha para o canal ATD e outra linha para o canal Televendas esta sendo plotada apenas uma linha para todas as informações da consulta.

Referencias do gráfico:
Eixo x: dt_primeiro_contato
Eixo y: tx_conv_real
Legenda: canal


O Codigo:
$res_chart_1 = mysql_query( $consulta_chart_1 )
or die('Não executou a query: ' . mysql_error());
if ( $row_chart_1 = mysql_fetch_assoc($res_chart_1) or die(mysql_error()) ) {
do {
$canal_chart_1[] = $row_chart_1['canal'];
$tx_conv_real_chart_1[] = $row_chart_1['tx_conv_real'];
$dt_primeiro_contato_chart_1[] = $row_chart_1['dt_primeiro_contato'];
} while ( $row_chart_1=mysql_fetch_assoc($res_chart_1) );
}

// Setup the graph

$data_chart_1 = array (
$canal_chart_1,
$tx_conv_real_chart_1,
$dt_primeiro_contato_chart_1
);

$graph_chart_1 = new Graph(450,200);
$graph_chart_1->SetScale("textlin");

$theme_class_chart_1=new UniversalTheme;

$graph_chart_1->SetTheme($theme_class_chart_1);
$graph_chart_1->img->SetAntiAliasing(false);
$graph_chart_1->title->Set('Resultado de Campanhas (Fonte DBM)');
$graph_chart_1->SetBox(false);

$graph_chart_1->img->SetAntiAliasing();

$graph_chart_1->yaxis->HideZeroLabel();
$graph_chart_1->yaxis->HideLine(false);
$graph_chart_1->yaxis->HideTicks(false,false);

$graph_chart_1->xgrid->Show();
$graph_chart_1->xgrid->SetLineStyle("solid");
$graph_chart_1->xgrid->SetColor('#E3E3E3');
$graph_chart_1->xaxis->SetTickLabels($dt_primeiro_contato_chart_1);

// Create the first line


for($i = 0; $i < sizeof($data_chart_1[0][$i]); ++$i) {
$p1_chart_[$i] = new LinePlot($data_chart_1[1]);
$graph_chart_1->Add($p1_chart_[$i]);
$p1_chart_[$i]->SetLegend($data_chart_1[0][$i]);
$p1_chart_[$i]->value->Show();
}

$graph_chart_1->legend->SetFrameWeight(1);

// Output line

$filename_chart_1 = "images/temp/resultado_campanha1".$_GET['id'].".png";
unlink($filename_chart_1);

$graph_chart_1->Stroke("images/temp/resultado_campanha1".$_GET['id'].".png");


0
14/02/2011 7:25pm
(~13 anos atrás)
Gostaria de ver um exemplo deste gráfico funcionando com a base de dados mysql.

http://jpgraph.net/features/src/show-example.php?target=new_line1.php

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)