Gráficos con PHP

Luego de investigar un poco, encontré 2 librerías (no comerciales) gestoras de gráficos en PHP.

Estas eran libchar la cual es muy fácil de usar, genera gráficos con buena estética aunque no tiene gran variedad de opciones, la otra es JpGraph, este tiene una versión comercial y otra no comercial, tiene una mayor complejidad en el uso que libchar aunque los resultados que se pueden lograr son mucho mejores.

De manera comparativa les mostrare ejemplo con ambas librerias.

Gráficos de barra con libchar

Gráfico de Barra con LibChar

include "libchart/classes/libchart.php";
$min = 10;
$max = 100;

$chart = new VerticalBarChart();

$dataSet = new XYDataSet();
$dataSet->addPoint(new Point("A", rand ($min ,$max )));
$dataSet->addPoint(new Point("B", rand ($min ,$max )));
$dataSet->addPoint(new Point("C", rand ($min ,$max )));
$dataSet->addPoint(new Point("D", rand ($min ,$max )));
$dataSet->addPoint(new Point("E", rand ($min ,$max )));
$dataSet->addPoint(new Point("F", rand ($min ,$max )));
$dataSet->addPoint(new Point("G", rand ($min ,$max )));
$chart->setDataSet($dataSet);

$chart->setTitle("Grafico de Barras");
header('Content-Type: image/png');
$chart->render();

Ahora veremos el mismo ejemplo con JpGraph

Grafico de Barra con JpGraph

A mi juicio, dada la cantidad de opciones, este sistema requiere un mayor esfuerzo para generar un grafico simple, aunque a su vez nos permitiría llegar a un grafico mucho mas acabado y completo.

require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_bar.php');

$min = 1;
$max = 3000;
$data1y = array(rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ));

$graph = new Graph(500,300);
$graph->SetScale("textlin");

$graph->SetShadow();
$graph->img->SetMargin(40,30,20,40);
$graph->xaxis->SetTickLabels(array('A','B','C','D','E','F','G'));

$b1plot = new BarPlot($data1y);
$b1plot->value->Show();

// Agregando el grupo de datos
$gbplot = new AccBarPlot(array($b1plot));
$graph->Add($gbplot);

//Titulos
$graph->title->Set("Titulo del grafico");
$graph->xaxis->title->Set("Titulo Eje X");
$graph->yaxis->title->Set("Titulo Eje Y");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Generamos el grafico
$graph->Stroke();

Gráficos de Torta

Grafico de Torta con libchar

include "libchart/classes/libchart.php";

$chart = new PieChart();

$min = 10;
$max = 100;

$dataSet = new XYDataSet();
$dataSet->addPoint(new Point("Dato 1", rand ($min ,$max )));
$dataSet->addPoint(new Point("Dato 2", rand ($min ,$max )));
$dataSet->addPoint(new Point("Dato 3", rand ($min ,$max )));
$dataSet->addPoint(new Point("Dato 4", rand ($min ,$max )));
$chart->setDataSet($dataSet);

$chart->setTitle("Grafico de Torta");
header('Content-Type: image/png');
$chart->getPlot()->setGraphCaptionRatio(0.5);
$chart->render();

Gráfico de Torta con JpGraph

require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_pie.php');
require_once ('jpgraph/src/jpgraph_pie3d.php');

$min = 10;
$max = 100;
$data = array(rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ));

$graph = new PieGraph(350,250);

$theme_class= new UniversalTheme;
$graph->SetTheme($theme_class);

$graph->title->Set("Grafico de Torta");

$p1 = new PiePlot3D($data);
$graph->Add($p1);

$p1->ShowBorder();
$p1->SetColor('black');
$p1->SetSliceColors(array('#1E90FF','#2E8B57','#ADFF2F','#BA55D3'));
$p1->SetLegends(array("Dato1","Dato2","Dato3","Dato4"));
$p1->ExplodeSlice(1);
$graph->Stroke();

Graficos de Líneas

Gráfico de Lineas con libchar

include "libchart/classes/libchart.php";

$min = 0;
$max = 1000;

$chart = new LineChart();

$serie1 = new XYDataSet();
$serie1->addPoint(new Point("06-01", rand ($min ,$max )));
$serie1->addPoint(new Point("06-02", rand ($min ,$max )));
$serie1->addPoint(new Point("06-03", rand ($min ,$max )));
$serie1->addPoint(new Point("06-04", rand ($min ,$max )));
$serie1->addPoint(new Point("06-05", rand ($min ,$max )));
$serie1->addPoint(new Point("06-06", rand ($min ,$max )));

$serie2 = new XYDataSet();
$serie2->addPoint(new Point("06-01", rand ($min ,$max )));
$serie2->addPoint(new Point("06-02", rand ($min ,$max )));
$serie2->addPoint(new Point("06-03", rand ($min ,$max )));
$serie2->addPoint(new Point("06-04", rand ($min ,$max )));
$serie2->addPoint(new Point("06-05", rand ($min ,$max )));
$serie2->addPoint(new Point("06-06", rand ($min ,$max )));

$serie3 = new XYDataSet();
$serie3->addPoint(new Point("06-01", rand ($min ,$max )));
$serie3->addPoint(new Point("06-02", rand ($min ,$max )));
$serie3->addPoint(new Point("06-03", rand ($min ,$max )));
$serie3->addPoint(new Point("06-04", rand ($min ,$max )));
$serie3->addPoint(new Point("06-05", rand ($min ,$max )));
$serie3->addPoint(new Point("06-06", rand ($min ,$max )));

$dataSet = new XYSeriesDataSet();
$dataSet->addSerie("Line 1", $serie1);
$dataSet->addSerie("Line 2", $serie2);
$dataSet->addSerie("Line 3", $serie3);
$chart->setDataSet($dataSet);

header('Content-Type: image/png');
$chart->setTitle("Grafico de Lineas");
$chart->getPlot()->setGraphCaptionRatio(0.62);
$chart->render();

Grafico de Lineas con JpGraph

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

$min = 0;
$max = 1000;

$datay1 = array(rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ));
$datay2 = array(rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ));
$datay3 = array(rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ),rand ($min ,$max ));

$graph = new Graph(500,350);
$graph->SetScale("textlin");

$theme_class=new UniversalTheme;

$graph->SetTheme($theme_class);
$graph->img->SetAntiAliasing(false);
$graph->title->Set('Grafico de Lineas');
$graph->SetBox(false);

$graph->img->SetAntiAliasing();

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

$graph->xgrid->Show();
$graph->xgrid->SetLineStyle("solid");
$graph->xaxis->SetTickLabels(array('06-01','06-02','06-03','06-04','06-05','06-06'));
$graph->xgrid->SetColor('#E3E3E3');

//Creando las lineas

$p1 = new LinePlot($datay1);
$graph->Add($p1);
$p1->SetColor("#6495ED");
$p1->SetLegend('Line 1');

$p2 = new LinePlot($datay2);
$graph->Add($p2);
$p2->SetColor("#B22222");
$p2->SetLegend('Line 2');

$p3 = new LinePlot($datay3);
$graph->Add($p3);
$p3->SetColor("#FF1493");
$p3->SetLegend('Line 3');

$graph->legend->SetFrameWeight(1);
$graph->Stroke();

Subjetivamente puedo decir que los gráficos hechos con libchar sin mucho esfuerzo se ven mejor frente a los realizados con JpGraph, aunque si uno tiene más tiempo, es recomendable JpGraph dado los resultados que se pueden lograr a tener. Les recomiendo ver la galería de JpGraph para apreciar mejor la potencialidad de este.

Este artículo fue publicado en php y etiquetado , , , . Marcador del enlace permanente.

5 Respuestas a Gráficos con PHP

  1. Me gustó más JpGraph, además Libchart tiene ese “Powered by” arriba en cada gráfico… no se puede sacar?

  2. jaime dijo:

    deseo utilizar libchart en mi aplicacion, que no es por cierto software abierto y quiero
    descargar valores a un archivo txt y leerlo con libchart , no conosco nada de php. estoy en eso. pero quiero realizar este tip rapido para un cliente. agradeceria ayuda en este momento. gracias !!!!!

  3. batubn dijo:

    Hola…
    Me demore un poco en responder…
    Solo se me ocurre pasar el txt a un arreglo de php y entregarselo como arreglo al libchart

    Saludos.

  4. Jose Vicente dijo:

    Me podrias decir la opcion para jpgraph para que los valores del eje X envezde salir horizontalmente salieran verticalmente porque son valores de texto demasiado largos

    Gracias

Agregar un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *