Gerando gráficos com PHP + PostgreSQL + FusionCharts

Gerando gráficos a partir do banco de dados – PHP + PostgreSQL

Esse Post foi movido para :

http://clares.com.br/2008/09/01/gerando-graficos-com-php-postgresql/

Desculpe pelo transtorno, aproveite para assinar o novo blog.

Marcado:, , ,

30 pensamentos sobre “Gerando gráficos com PHP + PostgreSQL + FusionCharts

  1. Elton Minetto setembro 4, 2008 às 8:09 pm

    Parabéns pelo blog. Posts de grande utilidade

  2. Liz fevereiro 3, 2009 às 7:14 pm

    Opa…achei o post

    Valew Rafael!!!!!!!!

  3. beatriz outubro 28, 2009 às 5:50 pm

    Olá adorei o post!
    a ferramenta é bem interessante, estou procurando a tempos uma ferramenta de grafico para trabalhar com php que seja free.
    Vi os exemplos em php, mas nao encontrei nenhum com legenda, vc sabe ajeitar a legenda do grafico de multi-séries para que ela fique do lado direito do grafico?
    muito obrigada
    beatriz

  4. Daniel março 30, 2010 às 1:56 am

    muito obrigado pelo post, esta a precisando muito desse grafico…
    vc é o cara!!!
    valeu

  5. Luiz abril 24, 2010 às 12:36 pm

    VAleu cara me ajudou muito

  6. Dionete julho 21, 2010 às 12:09 pm

    Parabéns pelo blog!
    Sou iniciante, estou tentando fazer o gráfico AngularGauge,até então nada.
    Pode me dar alguma dica sobre?
    Agradeço

    • Rafael Clares julho 21, 2010 às 12:23 pm

      Dionete, neste post é abordado o tema “gráficos com php” mas não conheço os tipo de gráficos, bem, o código proposto funciona, se tiver alguma dificuldade com o código você pode informar os erros e detalhes para eu tentar de ajudar…
      abraços

  7. MARA setembro 6, 2010 às 1:31 pm

    haeee!!!! otimo post, mas assim, tem como interagir o codigo com html, ou melhor, dentro de um formulario? É que estou tentando criar um formulario (html), e no mesmo quero colocar o grafico, só que ate agora não encontrei uma classe que funcione em pagina que tenha codigo em htmt.

  8. Danilo Tavares janeiro 14, 2011 às 3:40 pm

    parabéns! é a primeira vez que comento num post, gostei da sinceridade no fim do tópico.rs =D abraço

  9. michelmatos julho 15, 2011 às 4:06 pm

    Rafael, muito bom seu post!!!

    Estou tentando fazer um com consulta SQL, gostaria que vc me ajudasse!!!

    Tenho uma tabela com os campos, equipe, mes, idpedidos.
    Tenho que gerar um grafico onde mostre no mes as equipe e total de pedidos, até consegui fazer, porém ele esta bagunçando os valore. por exemplo o total da equipe “Adminitrativo” esta saindo no mês de novembro e deveria sair no mês de Abril.

    Segue o codigo que estou usando:

    $strQueryCategories = ” select distinct mes as mes from medicao ORDER BY equipe, mes “;

    $resultCategories = mysql_query($strQueryCategories) or die(mysql_error());

    $strQueryData = ” select equipe, mes, count(idpedido) as total from medicao group by equipe, mes order by equipe, mes “;

    $resultData = mysql_query($strQueryData) or die(mysql_error());

    $strXML = “”;
    // Build category XML
    $strXML .= buildCategories ($resultCategories, “mes” );
    // Build datasets XML
    $strXML .= buildDatasets ( $resultData, “total”, “equipe”);

    //Finally, close element
    $strXML .= “”;

    //Create the chart – Pie 3D Chart with data from strXML
    echo renderChart(“../../FusionCharts/StackedColumn3D.swf”, “”, $strXML, “FactorySum”, 700, 400, false, true);
    // Free database resource

    mysql_close($con);

    /***********************************************************************************************
    * Function to build XML for categories
    * @param $result Database resource
    * @param $labelField Field name as String that contains value for chart category labels
    *
    * @return categories XML node
    */
    function buildCategories ( $result, $labelField )
    {
    $strXML = “”;
    if ($result) {
    $strXML = “”;
    while($ors = mysql_fetch_array($result)) {
    $strXML .= “”;
    }
    $strXML .= “”;
    }
    return $strXML;
    }

    /***********************************************************************************************
    * Function to build XML for datesets that would contain chart data
    * @param $result Database resource. The data should come ordered by a control break
    field which would require to identify datasets and set its value to
    dataset’s series name
    * @param $valueField Field name as String that contains value for chart dataplots
    * @param $controlBreak Field name as String that contains value for chart dataplots
    *
    * @return Dataset XML node
    */
    function buildDatasets ($result, $valueField, $controlBreak )
    {
    $strXML = “”;
    if ($result) {
    $controlBreakValue =””;
    while( $ors = mysql_fetch_array($result) ) {
    if( $controlBreakValue != $ors[$controlBreak] )
    {
    $controlBreakValue = $ors[$controlBreak];
    $strXML .= ( $strXML ==”” ? “” : “”) . ( “” ) ;
    }
    $strXML .= “”;
    }
    $strXML .= “”;
    }
    return $strXML;
    }
    ?>

    • Rafael Clares julho 15, 2011 às 5:41 pm

      Michel acredito que a dificuldade esteja na cláusula SQL, o ideal é verificar no seu SGBD se o retorno da query está correto e só aí colocar a query na aplicação.
      Verifique no seu editor sql se os dados retornados estão vindo corretamente. E se a função buildDatasets está formando o xml corretamente.

  10. michelmatos julho 25, 2011 às 8:29 pm

    Fala Rafael.

    Estou precisando muito da sua ajuda!
    Até hj, não consegui gerar o grafico.
    Estou usando o foreach em vez de função porém também não estou tendo sucesso, gostaria que vc me ajudasse. veja o código abaixo.
    Tenho uma tabela onde temos equipe, mes, total de medições.
    Preciso que mostre o total de medições no mes de cada equipe, por exmplo no mês de janeiro a equipe ADM teria 20 medições, a equipe Leves teria 50 e a equipe de Pesados teria 35.
    Isso seria feito num grafico de colunas.

    FusionCharts – Array Example using Multi Series Column 3D Chart

    <?php

    $servidor = "localhost";
    $usuario = "root";
    $senha = "";
    $banco = "plantap";

    $con = mysql_connect($servidor, $usuario, $senha);
    mysql_select_db ($banco);

    $busca=mysql_query("select distinct mes, equipe, count(*) as total from medicao group by mes, equipe ");

    while ($dados=mysql_fetch_array($busca))
    {
    $time[$dados['equipe']][$dados['mes']]=$dados['total'];

    }

    //Initialize element
    $strXML = “”;
    //Initialize element – necessary to generate a multi-series chart
    $strCategories = “”;
    //Initiate elements

    foreach($time as $equipe=>$meses){
    $strDataCurr = “”;
    // echo $equipe;
    }

    //Iterate through the data
    foreach($time as $equipe=>$meses){
    foreach($meses as $mes=>$total){

    //Append to strCategories
    $strCategories .= “”;
    // echo $mes;
    //Add to both the datasets
    $strDataCurr .= “”;
    //echo $total;
    }

    }

    //Close element
    $strCategories .= “”;
    //Close elements
    $strDataCurr .= “”;
    //Assemble the entire XML now
    $strXML .= $strCategories . $strDataCurr . “”;

    //Create the chart – MS Column 3D Chart with data contained in strXML
    echo renderChart(“../../FusionCharts/StackedColumn3D.swf”, “”, $strXML, “productSales”, 900, 400, false, true);
    ?>

    • Rafael Clares julho 27, 2011 às 7:11 pm

      Michel, cara essa query está correta ? Digo, se você executar essa query no SGBD ela retorna o resultado corretamente ?
      Faça um dump apenas das tabelas usadas para gerar o gráfico e me mande juntamente como arquivo php que está tentando gerar o gráfico, também a descrição do problema.
      rafadinix@gmail.com
      Só que essa semana brother eu to ferrado aqui de trabalho!
      Abraço

  11. Thiago Alexandre agosto 22, 2012 às 12:57 pm

    Olá Rafael !
    Primeiro queria agradecer pela ajuda. Li seus posts foram essenciais para mim.
    Consegui gerar um gráfico dinâmico com PHP+PostgreSQL+FusionCharts. Ficou Show !

    • Rafael Clares agosto 22, 2012 às 1:09 pm

      Aê brother, que firmeza!
      Fico muito feliz quando alguém volta para escrever que “deu certo”. No geral só escrevem os “erros” mas quando funciona ninguém diz;
      Esse tipo de atitude me motiva a manter o blog.
      Muito obrigado e todo sucesso para você irmão. Vlw ;D

  12. Pedro Podsclan Neto setembro 6, 2012 às 1:58 pm

    Ola Rafael, primeiramente gostaria muito de agradecer os seus posts, eles foram de suma importancia para eu conseguir fazer os meus graficos, apenas gostaria de uma ajuda sua. Quando se plota um grafico do tipo Line, passando por parametro FCF_Line.swf, ao criar o grafico, ele coloca o valor de todos os parametros passados no campo set name do XML no eixo X, teria como não mostrar esses valores, já que o valor é mostrado em cada ponto do grafico quando se coloca o mouse encima.

    • Rafael Clares setembro 6, 2012 às 2:13 pm

      Fala Pedro, cara, tente passar o seguinte parâmetro showValues=’0′, exemplo:
      Onde está gerando o cabeçalho do XML
      graph xAxisName=’Meses’ yAxisName=’Acessos’ showValues=’0′

      Veja http://docs.fusioncharts.com/charts/contents/AttDesc/ToolTip.html
      Dê uma explorada nas docs
      http://docs.fusioncharts.com/charts/

      abs

      • Pedro Podsclan Neto setembro 6, 2012 às 8:03 pm

        Obrigado pelo feedback tão rápido, tentei passando o parametro showValues=’0′ e dessa forma ele não exibe os valores nos pontos do gráfico, eu quero é não exibir o valor do set name no eixo X, voce pode esta se perguntanodo pq? Porque o meu valor é uma string grande, quando o gráfico é plotado uma string sobrepoem outra. Aproveitando o reply, sabe como se mexe na escala? É automaticamente de 10 em 10? Não da pra diminuir?

      • Rafael Clares setembro 12, 2012 às 12:39 am

        Pedro, esse nível de detalhe você só vai encontrar na documentação do fc. Acho que seria legal você perder um tempinho lá! Infelizmente eu também não tive tempo de testar todas as possibilidades;

  13. Valderli setembro 19, 2012 às 2:42 pm

    Olá Rafael,

    Parabéns pelo seu Blog, pois tem muita coisa interessante.

    Eu estou precisando fazer alguns gráficos a partir de dados geoespaciais. Os dados geoespaciais são de focos de calor na Amazônia. A intenção é obter gráficos por estados e/ou por municípios dessses dados, eu os tenho em tabela no formato shapefile e os mesmos estão no banco de dados Postgres. Com as informações do seu blog consegui efetuar a conexão, porém não consegui gerar o gráfico mesmo seguindo as orientações suas sobre gerar gráficos com PHP + PostgreSQL + FusionCharts .

    Vc poderia me ajudar fornecendo mas algumas informações de como posso proceder para fazer esses gráficos?

    Desde já agradeço

    • Rafael Clares setembro 19, 2012 às 3:40 pm

      Valderli, obrigado pelo comentário;
      Nesse caso é preciso que você informe onde está havendo a dificuldade, se exibe alguma mensagem de erro ou até mesmo como está se comportando seu script;
      Tente copiar o trecho do código que você montou no pastebin.com e me mande o link aqui no comentário, assim eu consigo dar uma olhada no código.
      Não cole o código nos comentários porque geralmente não aparecem.;
      Abs

      • Valderli setembro 21, 2012 às 1:07 pm

        Rafael, obrigado pela atenção.
        Consegui encontrar o erro estava na parte que trata sobre:
        #Selecionando/contando os usuários por cidade
        $queryCid = pg_query(“select * from cidades“);
        while($row = pg_fetch_array($queryCid))
        {
        $idcidade = $row[‘idcidade’];
        $nomecidade = $row[‘nomecidade’];
        $numCidUsu = pg_num_rows(pg_query(“select * from usuarios where idcidade = $idcidade“));
        #Adicionando os dados nas barras ( usuarios a cidade)
        $FC->addChartData($numCidUsu,”name=$nomecidade“);
        }
        Que no meu caso no lugar de cidade eu coloquei os estados e no lugar de usuários eu coloquei os focos de calor. Antes não estava dando certo pq eu não havia selecionado corretamente os “ids” de cada tabela (shapefile).

        Eu gostaria de tirar mais uma dúvida. É pq como alguns nomes de estados têm acentos e estes no gráfico aparecem com caracteres diferentes (exemplo: o estado de Rondônia que tem o acento circunflexo. No gráfico fica assim: Rondã”nia. É possível resolver isso?

        Obrigado mais uma vez.

      • Rafael Clares setembro 21, 2012 às 1:13 pm

        Derlli, use o utf8_decode();
        Ex:

        $uf – utf8_decode( $rows[‘uf’] );

        abs

  14. Valderli setembro 21, 2012 às 1:37 pm

    Obrigado Rafael.

    Funcionou. Só lembrando que no lugar do sinal – tive que colocar um símbolo de = pra funcionar corretamente.

    Valeu..

    • Rafael Clares setembro 21, 2012 às 1:43 pm

      kkkkkkkkkkk foi falha de digitação, que mancada a minha!
      Abs

  15. Valderli outubro 5, 2012 às 12:02 pm

    Rafael queria mais uma ajuda sua.

    É o seguinte, no exemplo que vc colocou (corrige-me se eu estiver errado) a função “pg_num_rows” retorna a quantidade de linha para cada “$idcidade”. Eu gostaria de saber como faço para retornar o valor de cada linha referente ao idcidade, ou seja, eu quero que retorne o valor e não a quantidade de linhas com o mesmo valor. Até pq o que pretendo fazer agora é que cada linha apresenta um valor diferente.

    Nesse caso como ficaria a consulta sql para o banco de dados PostgreSQL para gerar o gráfico?

    Obrigado mais uma vez Rafael.

    • Rafael Clares outubro 5, 2012 às 2:17 pm

      Valderli, o id da cidade já está sendo retornado na linha:
      $idcidade = $row[‘idcidade’];

      Basta usa-lo onde desejar, se não vai usar pg_num_rows, poderá remover a linha que contém tal comando;

      • Valderli outubro 5, 2012 às 5:43 pm

        Rafael,

        Ao remover não aparece nada no gráfico

        Deixa eu explicar melhor o que eu quero

        Seria uma tabela assim:

        idcidade nome_cidade usuarios_cidades
        1 Angra dos Reis 100
        2 Buzios 300
        3 Seropédica 500

        Apartir dessa tabela que está no bando de dados PostgresSQL gerar uma gráfico mostrando a quantidade de usúarios por cidade

        Como ficaria a consulta sql para gerar o gráfico?

        Obrigado

  16. Valderli outubro 6, 2012 às 1:26 pm

    Rafael,

    Descobri o que estava acontecendo. Era exatamente o que vc falou, porém eu havia esquecido de alterar como por exemplo o $numCidUsu para $idcidade em $FC->addChartData($numCidUsu,”name=$nomecidade“);

    Obrigado…..valeu até mais….

Os comentários estão desativados.

%d blogueiros gostam disto: