Google Charts

Costas

Administrator
Staff member

Pie Chart

ref - https://google-developers.appspot.com/chart/interactive/docs/gallery/piechart
using the ^page sample, at legends doesnt write the value, use the following fix by Fabio Cordeiro
JavaScript:
//http://stackoverflow.com/a/37333511
</php
//fill $result with a PDO recordset
$countries = array();
$countries[] = array('Country', 'Hits per Day');
foreach($result as $row) {
	$countries[] = array($row[0]['country'], sizeof($row));
}

?>

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() {

		var data = google.visualization.arrayToDataTable(<?= json_encode($countries);?>);
 
        var total = 0;
        for (var i = 0; i < data.getNumberOfRows(); i++) {
            total = total + data.getValue(i, 1);    
        }

        for (var i = 0; i < data.getNumberOfRows(); i++) {
                var label = data.getValue(i, 0);
            var val = data.getValue(i, 1) ;
            var percentual = ((val / total) * 100).toFixed(1); 
            data.setFormattedValue(i, 0, label  + ' - '+val +' ('+ percentual + '%)');    
        }
	

        var options = {
          title: 'Tickets Per Country'
        };

        var chart = new google.visualization.PieChart(document.getElementById('piechart'));

        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="piechart" style="width: 900px; height: 800px;"></div>
  </body>
</html>

or you can draw lines and show the values adding this to options :
JavaScript:
//http://stackoverflow.com/a/19181740
legend: {
    position: 'labeled'
}
 
 

Fixing the bootstrap nav-tabs when displaying Google Chart(s) on more than 1 tab
JavaScript:
//src - http://stackoverflow.com/a/30468366
<?php

//fill $result with a PDO recordset
$countries = array();
$countries[] = array('Country', 'Hits per Day');
foreach($result as $row) {
    $countries[] = array($row[0]['country'], sizeof($row));
}

//fill $result2 with a PDO recordset
$users = array();
$users[] = array('Users', 'Hits per Day');
foreach($result2 as $row) {
    $users[] = array($row[0]['users'], sizeof($row));
}

?>

<html>
  <head>
    <script src="assets/jquery-3.1.1.min.js"></script>
    <script src="assets/bootstrap.min.js"></script>
    <link href="assets/bootstrap.min.css" rel="stylesheet">
      
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
        //output charts to PNG - https://developers.google.com/chart/interactive/docs/printing
        
        $(function() {
        	
        	//fix to draw or redraw when user switch tab 
            $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
                //http://stackoverflow.com/a/30468366
                
                //draw the pies TAB1
                if (this.href.indexOf('#countries')>0){
		          byCountryPIE();
		          //any other chart for 1st tab.
		          //byCountrySoftwaresPIE();
		          //byCountryCompaniesPIE();
                }
                
                //draw the pies TAB2
                if (this.href.indexOf('#users')>0){
                  byUserPIE();
                  //any other chart for 2nd tab.
                  //byUserSoftwaresPIE();
                  //byUserCompaniesPIE();
                }
                
            })

        });
        
        
      google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(draw_pies);
        
      //triggered only by^
      function draw_pies(){
          byCountryPIE();
          //any other chart for 1st tab.
          //byCountrySoftwaresPIE();
          //byCountryCompaniesPIE();
      }
        
    /////////////////////////////
    //byCountryPIE
    function byCountryPIE() {

		var data = google.visualization.arrayToDataTable(<?= json_encode($countries);?>);
 
        //fix to display the value in legend
        var total = 0;
        for (var i = 0; i < data.getNumberOfRows(); i++) {
                total = total + data.getValue(i, 1);    
        }

        for (var i = 0; i < data.getNumberOfRows(); i++) {
                var label = data.getValue(i, 0);
            var val = data.getValue(i, 1) ;
            var percentual = ((val / total) * 100).toFixed(1); 
            data.setFormattedValue(i, 0, label  + ' - '+val +' ('+ percentual + '%)');    
        }
        //fix to display the value in legend
	

        var options = {
          title: 'Tickets Per Country'
        };


        var chart = new google.visualization.PieChart(document.getElementById('byCountryPIE'));

        chart.draw(data, options);
      }
      
//------------USERS------------
        
    /////////////////////////////
    //byUserPIE
    function byUserPIE() {

		var data = google.visualization.arrayToDataTable(<?= json_encode($users);?>);
 
        //fix to display the value in legend
        var total = 0;
        for (var i = 0; i < data.getNumberOfRows(); i++) {
                total = total + data.getValue(i, 1);    
        }

        for (var i = 0; i < data.getNumberOfRows(); i++) {
                var label = data.getValue(i, 0);
            var val = data.getValue(i, 1) ;
            var percentual = ((val / total) * 100).toFixed(1); 
            data.setFormattedValue(i, 0, label  + ' - '+val +' ('+ percentual + '%)');    
        }
        //fix to display the value in legend
	

        var options = {
          title: 'Tickets Per User'
        };


        var chart = new google.visualization.PieChart(document.getElementById('byUserPIE'));

        chart.draw(data, options);
      }
     
    </script>
  </head>
  <body>
<div class="container-fluid">
    [LIST]
      <li role="presentation" class="active">[url='#countries']Countries[/url]        
      <li role="presentation">[url='#users']Users[/url]
      <li role="presentation">[url='#about']About[/url]
    [/LIST]

    
    <div class="tab-content">
      <div id="countries" class="tab-pane fade in active">
            <div class="row">
                <div class="col-md-6">
                	<div id="byCountryPIE" style="width: 1000px; height: 800px;"></div>
                </div>

            </div>
      </div>
      <div id="users" class="tab-pane fade">
            <div class="row">
                <div class="col-md-6">
                	<div id="byUserPIE" style="width: 1000px; height: 800px;"></div>
                </div>
            </div>
      </div>
      <div id="about" class="tab-pane fade">
            <div class="row">
                    pipiscrew sample
            </div>
      </div>
    </div>

</div>
  </body>
</html>
 
 

 

dynamic add columns to Google Bar Chart!
reference
http://google-developers.appspot.com/chart/interactive/docs/gallery/columnchart



JavaScript:
//sample1
<?php
$chart_row_setup = array();

$chart_columns_setup= array();
$chart_columns_setup[]="Type";
$chart_columns_setup[]="Income";
$chart_columns_setup[]="Expenses";
$chart_columns_setup[]="NET";

//chart legend
$chart_row_setup[0] = $chart_columns_setup;

for ($i=1;$i<12;$i++){
	$col_vals= array();
	$col_vals[]=monthName($i);
	
	$col_vals[]=(int)$ListOfBalanceRECS[$i]->income;
	$col_vals[]=(int)$ListOfBalanceRECS[$i]->expense;
	$col_vals[]=(int)$ListOfBalanceRECS[$i]->net;
	
	$chart_row_setup[] = $col_vals;
}
?>

    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
  
      google.load("visualization", "1.1", {packages:["bar"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable(<?= json_encode($chart_row_setup);?>);
 
        var options = {
          chart: {
            title: 'Company Performance',
            subtitle: 'Sales, Expenses and Profit',
          }
        };
 
        var chart = new google.charts.Bar(document.getElementById('columnchart_material'));
 
         chart.draw(data, options);
        }
      </script>

JavaScript:
//sample2
<?php
//get users
$chart_db_users = getSet($db,"select user_id,fullname from users where user_level_id in (31,42,59)",null);

$chart_row_setup = array();

$chart_columns_setup= array();
$chart_columns_setup[]="Month";
for( $i= 0 ; $i <= sizeof($chart_db_users)-1 ; $i++ )
{
	$chart_columns_setup[]	= $chart_db_users[$i]["fullname"];
}

//always on 0 array position are the bar names
$chart_row_setup[0] = $chart_columns_setup;



//below merge the bars values
$col_vals= array();

//for each month
for( $m= 1 ; $m <= 12 ; $m++ )
{
	$col_vals= array();
	
	$col_vals[]=monthName($m);
	
	//construct valid date for mySQL
	if ($m<10)
	{
		$start = date("Y-0{$m}-01");

		$end =  get_end_of_the_month($m,date('Y'));
	}
	else 
	{	$start = date("Y-{$m}-01");
		$end =  get_end_of_the_month($m,date('Y'));
	}
	
	//for each user
	for( $i= 0 ; $i <= sizeof($chart_db_users)-1 ; $i++ )
	{
		//query with date between depends on $m variable
		$col_vals[] = (int) getScalar($db,"select count(offer_id) from offers where offer_seller_id=".$chart_db_users[$i]['user_id']." and offer_proposal_date between '".$start."' and '".$end."'",null);
	}
	
	$chart_row_setup[]=$col_vals;
}
	
//http://edpriceishungry.com/2010/01/04/converting-integers-to-monthnames-in-php/
function monthName($month_int) {
	$month_int = (int)$month_int;
	$timestamp = mktime(0, 0, 0, $month_int);
	return date(“F”, $timestamp);
}

function get_end_of_the_month($month, $year) {
	if (strlen($month)==1)
		$month="0".$month;
		
	//t returns the number of days in the month of a given date 
	$d = date("t", strtotime(date("{$year}-{$month}-d")));
	$m = date("{$year}-{$month}-{$d}"); //format back to mysql style!
	return  $m;
}
?>

//pass array to javascript
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
   
      google.load("visualization", "1.1", {packages:["bar"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable(<?= json_encode($chart_row_setup);?>);

        var options = {
          chart: {
            title: 'Company Performance',
            subtitle: 'Sales, Expenses, and Profit: 2014-2017',
          }
        };

        var chart = new google.charts.Bar(document.getElementById('columnchart_material'));

        chart.draw(data, options);
      }
    </script>

snap336.png
 
Top