martes, 19 de marzo de 2013

Graficas con JPGRAPH y MySQL

Bueno esta  entrada es un seguimiento a la entrada de Gráficas con Jpgraph en la que vimos como crear una gráfica y mostrarla en una pagina, así como sus atributos.

En el ejemplo que vimos en esa entrada le pasábamos los valores directo en código  pero ahora vamos a ver un ejemplo de como pasarle los datos desde una consulta a una base de datos hechas en mysql.

Te recomiendo que hagas la practica anterior, para que puedas entender. El resultado sera:




Partiendo del ultimo código que era este .


<?php
 require_once ('jpgraph/src/jpgraph.php');
 require_once ('jpgraph/src/jpgraph_bar.php');
 
// Creamos el grafico
$datos=array(6,5,8,6);
$labels=array("pepe","juanita","Maria","Luis");

$grafico = new Graph(500, 400, 'auto');
$grafico->SetScale("textint");
$grafico->title->Set("Ejemplo de Grafica");
$grafico->xaxis->title->Set("trabajadores");
$grafico->xaxis->SetTickLabels($labels);
$grafico->yaxis->title->Set("Horas Trabajadas");
$barplot1 =new BarPlot($datos);
// Un gradiente Horizontal de morados
$barplot1->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR);
// 30 pixeles de ancho para cada barra
$barplot1->SetWidth(30);
$grafico->Add($barplot1);
$grafico->Stroke();
?>

que muestra la gráfica de la siguiente manera:



Ahora lo que vamos a hacer es cambiar la variables $datos y la variable $labels, por dos arreglos que vamos a llenar con datos provenientes de una consulta.

Empecemos:

Voy a crear una base de datos desde phpMyadmin  que se va a llamar usuarios y en ella voy a crear dos tablas "users" y "horas".
users: solo va a tener dos campo el id auto-incrementable y el nombre (Maria, Jose, Luis, Teresa).
horas: va a tener 3 campos, el id autoincrementable, el id del usuario, y las horas.


ahora vamos a crear una conexion a la base de datos en nuestro archivo php, despues de el segundo require(), pero antes de  //creamos el grafico.

el código quedaría de a siguiente manera.


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

//Conexion a la base de datos
 $mysqli= new mysqli("localhost","root", "", "usuarios");

 if($mysqli->connect_errno){

   // echo "Fallo al conectar a MySQL:(". $mysqli->connect_errno.")". $mysqli->connect_errno;
}

// Creamos el grafico

$datos=array(6,5,8,6);
$labels=array("pepe","juanita","Maria","Luis");

$grafico = new Graph(500, 400, 'auto');
$grafico->SetScale("textint");
$grafico->title->Set("Ejemplo de Grafica");
$grafico->xaxis->title->Set("Trabajadores");
$grafico->xaxis->SetTickLabels($labels);
$grafico->yaxis->title->Set("Horas Trabajadas");
$barplot1 =new BarPlot($datos);

// Un gradiente Horizontal de morados
$barplot1->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR);

// 30 pixeles de ancho para cada barra
$barplot1->SetWidth(30);
$grafico->Add($barplot1);
$grafico->Stroke();

?>


Para entender mejor como hacer una conexión a una base de datos visita mi entrada consultas en mysql y php.
Nota: para probar primero tu conexión recuerda comentar todo el código referente a la gráfica o te puede marcar errores por que no se debe mandar imprimir nada antes de la gráfica  una vez que la conexión es correcta comenta el error.

Ahora amos a realizar una consulta en la que pediremos el nombre de los trabajadores de la tabla users y sus respectivas horas trabajadas que se encuentran en la tabla horas.

El código quedaría de la siguiente manera:


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

 //Conexion a la base de datos
 $mysqli= new mysqli("localhost","root", "", "usuarios");

 if($mysqli->connect_errno){
   // echo "Fallo al conectar a MySQL:(". $mysqli->connect_errno.")". $mysqli->connect_errno;
}

 //Consulta
$resultado=$mysqli->query("SELECT users.nombre,horas.horas from users, horas where users.id=horas.id_usuario");

//arreglos donde se guardaran los resultados de la consulta.
$usuarios=array();
$horas=array();

//Recorre el resultado de la consulta y los almacena en los arreglos
while($row=$resultado->fetch_assoc()){
   $usuarios[]=$row['nombre'];
   $horas[]=$row['horas'];
}

/*
// Creamos el grafico

$datos=array(6,5,8,6);
$labels=array("pepe","juanita","Maria","Luis");

$grafico = new Graph(500, 400, 'auto');
$grafico->SetScale("textint");
$grafico->title->Set("Ejemplo de Grafica");
$grafico->xaxis->title->Set("Trabajadores");
$grafico->xaxis->SetTickLabels($labels);
$grafico->yaxis->title->Set("Horas Trabajadas");
$barplot1 =new BarPlot($datos);

// Un gradiente Horizontal de morados
$barplot1->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR);

// 30 pixeles de ancho para cada barra
$barplot1->SetWidth(30);
$grafico->Add($barplot1);
$grafico->Stroke();    
*/
?>


Explicare un poquito el codigo de la consulta:
Lo que se hace es declarar dos arreglos(array()) $usuarios y $horas. Después con un while vamos a recorrer el resultado de la consulta y lo va a ir almacenando en su respectivo arreglo, esto quiere decir que cada nombre que muestre el resultado de la consulta lo va a guardar en el arreglo $usuarios y su respectiva hora la va a guardar en el arreglo $horas.

TIP: Con var_dump($usuarios), puedes ver el contenido de tus arreglos par que verifiques que te esta almacenando datos correctamente.

Ahora lo que sigue es remplazar los datos que le estábamos pasando a la gráfica que eran las variables $labels y $datos, por los arreglos que acabamos de crear esto seria en las  lineas de codigo:

$grafico->xaxis->SetTickLabels($labes);  remplazar por:  $grafico->xaxis->SetTickLabels($usuarios);
y
$barplot1 =new BarPlot($datos); remplazar por: $barplot1 =new BarPlot($horas);

El código quedaría de la siguiente manera:




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

 $mysqli= new mysqli("localhost","root", "", "usuarios");

if($mysqli->connect_errno){
   // echo "Fallo al conectar a MySQL:(". $mysqli->connect_errno.")". $mysqli->connect_errno;
}

$resultado=$mysqli->query("SELECT users.nombre,horas.horas from users, horas where users.id=horas.id_usuario");

$usuarios=array();
$horas=array();

while($row=$resultado->fetch_assoc()){
   $usuarios[]=$row['nombre'];
   $horas[]=$row['horas'];
}

// Creamos el grafico
$grafico = new Graph(500, 400, 'auto');
$grafico->SetScale("textint");
$grafico->title->Set("Ejemplo de Grafica");
$grafico->xaxis->title->Set("Trabajadores");
$grafico->xaxis->SetTickLabels($usuarios);
$grafico->yaxis->title->Set("Horas Trabajadas");
$barplot1 =new BarPlot($horas);
// Un gradiente Horizontal de morados
$barplot1->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR);
// 30 pixeles de ancho para cada barra
$barplot1->SetWidth(30);
$grafico->Add($barplot1);
$grafico->Stroke();
?>

Al correr la grafica se vera de la siguiente manera.

Como pueden ver es muy sencillo obtener datos de una consulta y pasarlos a la gráfica la manera de mostrarla en html es por medio de la etiqueta imagen.

Espero que les haya servido esta continuación del tutorial. Gracias por sus comentarios. cualquier duda, comentario o aportación es bien recibida., no duden en comentar.

"Programar no tiene que ser tan difícil como parece...."

91 comentarios:

  1. Muchas gracias por el aporte me ha sido muy util. Tengo una pregunta, cómo se usaria con "jpgraph_line.php". Con miras a realizar una grafica de linea.?

    ResponderEliminar
    Respuestas
    1. Hola guillermo disculpa que te conteste hasta ahorita pero gracias a tu comentario subi una entrada con un ejemplo de gráfica lineal por si lo quieres checar http://easy-codigo.blogspot.mx/2013/05/graficas-con-jpgraph-grafica-de-linea.html#more
      Gracias por dejar tu comentario. saludos :D

      Eliminar
    2. mincio@mg.com.pe

      Eliminar
  2. Me envia este error.

    Parse error: syntax error, unexpected end of file in C:\wamp\www\PruebasGraficos\Nueva carpeta\pruebaJP.php on line 36

    ResponderEliminar
    Respuestas
    1. revisa que hayas comentado el echo que imprime el error de conexión, recuerda que no se debe mandar imprimir nada antes de la gráfica.

      Eliminar
    2. Pues no me marco ningun error. pero no puedo visualizar nada...

      Eliminar
  3. No me muestra la grafica, solo me manda esto la informacion de la base de datos en varia lineas.

    ResponderEliminar
    Respuestas
    1. Revisa que esten bien las ruas de las librerías y no debes mandar imprimir nada antes de la gráfica no debe haber ningun eco o print activo si los tienes comentalos.

      Eliminar
  4. me envia un mensaje que dice que no se puede mostrar la imagen porque contiene errores. Porque es, que estoy haciendo mal.

    ResponderEliminar
    Respuestas
    1. igual revisa que el echo este comentado recuerda que no se debe imprimir nada antes de la gráfica no debe de haber ningun echo ni print activo en el documento php

      Eliminar
  5. Hola como hago para que me envie el porcentaje en cada barra y como hago para que en los ejes me envie hasta 100. Otra pregunta como genero varios graficos en un solo documento, esto con el fin de hacer comparacion de informacion.
    Gracias.

    ResponderEliminar
  6. Como poner varios gráficos pues solo tienes que hacer para cada gráfica un archivo php y pon varias imagenes a cada una darle la ruta del archivo php.
    Las otras preguntas directamente a las barras o a las lineas no he visto como poner texto arriba pero puedes agregar texto extra y por coordenada acomodarlo a que quede en la posición que deseas revisa en la carpeta de Examples que viene con Jpgraph el ejemplo textalignex1.php para que te des una idea. y la otra no te entiendo que te envie hasta 100 en el eje?? el eje se va a comodar de acuerdo a los valores que vayas a graficar.

    ResponderEliminar
  7. Buenas tardes, que pasaría si en la tabla horas se repitiera el id_usuario con otro numero de horas, ¿como agruparlas o sumar los valores, gracias por el aporte

    ResponderEliminar
  8. Buenas tardes, que pasaría si en la tabla horas se repitiera el id_usuario con otro numero de horas, ¿como agruparlas o sumar los valores?, gracias por el aporte

    ResponderEliminar
  9. Hola como hago para poner las etiquetas a cada barrita, mi problema es que si lo hago como en el ejemplo las etiquetas quedarian numericas porque eso es lo que tengo en mi tabla puros numeros, he creado arreglos para luego pasarle a la etiqueta de cada barra, pero solo me toma uno, como hago para que me tome los demas.

    Otra cosa, quiero que en otro grafico me muestre las etiquetas y el porcentaje, el porcentaje ya me lo muestra, ahora solo quiero junto al porcentaje las etiquetas en la superficie del grafico, porque en la parte de abajo ya he agregado otra informacion.

    ResponderEliminar
  10. Hola!!!

    como se pueden ver dos columnas

    ResponderEliminar
  11. hola...como pusiste los porcentajes a cada barrita

    ResponderEliminar
    Respuestas
    1. Intentalo con $barplot1->value->Show(); antes del $grafico->Add()

      Eliminar
  12. Buenas, he probado a poner dos gráficas en una misma pantalla, pero no me aparece, para comparar por ejemplo, de año en año, como van evolucionando las cosas, he puesto este código, pero solo me aparece un gráfico...


    // Creamos el grafico
    $grafico = new Graph(1000, 300, 'auto');
    $grafico->SetScale("textint");
    $grafico->title->Set("Gráfica de Ejemplo");
    $grafico->xaxis->title->Set("Meses");
    $grafico->xaxis->SetTickLabels($labels);
    $grafico->yaxis->title->Set("Empeleado");
    $barplot1 =new BarPlot($datos);
    // Un gradiente Horizontal de morados
    $barplot1->SetFillGradient("#4000FF", "#7A7FC9", GRAD_HOR);
    // 30 pixeles de ancho para cada barra
    $barplot1->SetWidth(30);
    $grafico->Add($barplot1);
    $grafico->Stroke();


    // Creamos el grafico2
    $grafico2 = new Graph(1000, 300, 'auto');
    $grafico2->SetScale("textint");
    $grafico2->title->Set("Gráfica de Ejemplo2");
    $grafico2->xaxis->title->Set("Meses");
    $grafico2->xaxis->SetTickLabels($labels);
    $grafico2->yaxis->title->Set("Empleado");
    $barplot2 =new BarPlot($datos);
    // Un gradiente Horizontal de morados
    $barplot2->SetFillGradient("#4000FF", "#7A7FC9", GRAD_HOR);
    // 30 pixeles de ancho para cada barra
    $barplot2->SetWidth(30);
    $grafico2->Add($barplot2);
    $grafico2->Stroke();

    con eso no debería mostrarme dos veces la gráfica? ya que se crean 2 objetos no??? Gracias ^^

    ResponderEliminar
    Respuestas
    1. Lo que se tiene que crear son diferentes plots ($barplot) y añadirlos a un solo plano($grafico). Lo que tu estas haciendo es crear varias graficas y no varias barras hice un ejemplo espero que sea lo que necesitas
      http://easy-codigo.blogspot.mx/2013/08/jpgraph-grafica-de-2-barras.html

      Gracias por pasar al blog. saludos.

      Eliminar
  13. Buenos días, intente hacer lo que me dijiste, pero el grafico no me lo muestra, me muestra es un gráfico de una hoja, y no se porque, te mando el link de los ejemplos, para que por favor los revises, y me colabores haber que pasó, o que error tengo.

    Mil gracias, el link es: https://dl.dropboxusercontent.com/u/4617181/EJEMPLO%20GRAFICO.rar, yo utilizo Xamp.

    Agradezco su gentil ayuda.

    ResponderEliminar
  14. Una cosa adicional, el enlace lo pegas al navegador, es un enlace seguro de Dropbox, he estado probando los ejemplos de la librería de JpGraph y si me funcionan. Mil gracias.

    ResponderEliminar
    Respuestas
    1. ok el asunto esta que no debes mandar nada gráfico por lo que el poner las tablas las cabeceras de html y eso no va, el código php debe estar "limpio sin nada de html" además los requiere_once deben de ir al inicio del código.
      Solo deja la conexión a tu base de datos y la gráfica quita todo el html.

      Eliminar
  15. Alguien sabe como poner un porcentaje encima de cada barra. Ejemplo por favor.

    ResponderEliminar
    Respuestas
    1. los valores encima de la barra se muestra con $barplot1->value->Show(); antes del $grafico->Add()

      Eliminar
  16. Como poner un href en la gráfica que me redireccione a otra pagina. he intentado pero no sale.

    ResponderEliminar
    Respuestas
    1. las graficas las mandas llamar generalmente por medio de una imagen entonces puedes colocalr la etiqueta de la imagen dentro de un href.

      Eliminar
    2. No me queda muy claro pero habría alguna forma de llamar o mostrar la gráfica dentro de una div, un section o cualquier otro elemento en html o con php.

      Eliminar
    3. El ejemplo de como mandar llamar una gráfica en htmnl ya esta visita http://easy-codigo.blogspot.mx/2012/06/graficas-con-jpgraph.html ahí esta lo más sencillo y te invito a que revises mis otros ejemplos y de ahí puedas tomar lo que necesites.

      Eliminar
  17. hola, primero quiero felicitarte por tan buena aportacion, muy bien explicado. Ahora, tengo una duda, estoy realizando una pagina en donde tengo que mostrar una tabla que es la que proporciona los datos para llenar la grafica, e intentado realizar todo en un mismo archivo, pero o no se ve la grafica o no se ve la tabla, esto debido a la cabecera header('Content-type: image'), ahora estoy tratando de llamar a la grafica a traves de ajax pero lo que me carga son puros caracteres extraños. si tuvieras algun correo para enviarte los archivos. espero me puedas ayudar de antemano muchas gracias.

    ResponderEliminar
  18. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  19. Hola quiero graficar la suma de varias columnas, ya tengo la consulta
    SELECT SUM( parcialUno ) AS Movilidad, SUM( parcialDos ) AS Hogar
    FROM prueba

    pero solo me mustra una barra

    ResponderEliminar
    Respuestas
    1. Los resultados de las sumas los tienes que pasar a un arreglo y ese arreglo pasarlo a la gráfica. por cada datos en el arreglo es una barra

      Eliminar
  20. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  21. Hola ya logre sacar la grafica esta en el archivo grafica.php to esta bien la puede visualizar ok, pero quiro mostrarla en otra parte de mi web al llamar con un include no sale la imagen si no un monton de caracteres M��� �� �F}>

    ResponderEliminar
    Respuestas
    1. por que no se carga como archivo si no que omo una imagen cuya ruta es la del archivo php
      en tu otra parte de la web agregala como un obejto img src="grafica.php"

      Eliminar
  22. hola en tu anteriol tutorial comentabas acerca del error que te genera si haces llamadas a otras paginas, ya que yo cuento con una pagina que genera datos en la misma y los pone en la grafica y me sale este error que me recomiendas para que no salga?

    ResponderEliminar
    Respuestas
    1. Yo te recomiendo que tengas la grafica en un archivo aparte y mandes los datos como parametros de esa froma no te genere erores.

      Eliminar
  23. Hola, si solo cuento con una tabla como haria para graficar la cantidad de registros en cada uno de los campos. Y otra pregunta, como podria graficar esta misma cantidad de registros pero ahora tomando los porcentajes de cada uno de los registros posibles, bueno esq quisiera realizar una grafica, que me diga la cantidad de veces que respondieron una respuesta los usuarios (suponiendo que son respuestas fijas y que los campos son las preguntas), por ejemplo me mostraria una grafica (de la pregunta 1) que diria 30% SI 70% NO, nose si me explico....

    ResponderEliminar
  24. como puedo arreglar este error.
    Fatal error: Call to a member function fetch_assoc() on a non-object in C:\xampp\htdocs\sysbodega\jpgraph-3.5.0b1\graficos.php on line 18

    ResponderEliminar
  25. Hola Que tal buenas tardes, primero que nada gracias por este importante aporte para los que apenas empezamos a programar, hice este ejemplo paso a paso a como tu lo describes pero cuando hago la consulta no me muestra la la grafica, que estoy haciendo mal si es el mismo ejemplo tal y como tu los hiciste, antes de poner la consulta si me muestra la grafica pero al agregarla ya no me muestra la grafica, esperando una respuesta me despido.

    ResponderEliminar
    Respuestas
    1. checa tu consulta por que a lo mejor al armar los arreglo es donde tienes algún error.
      recuerda no hacer ningun comentario antes de la grafica

      Eliminar
    2. Hola Ary. pos mira que no se que hago mal porque ya lo hice de nuevo y cuando agrego lo de la consulta no me muestra la grafiaca. de hecho copie y pegue tu codigo tal y cual y nada serias tan amable en enviarme los archivos a mi correo para correrlos y analizar que hago mal de antemano muchas gracias por tu atencion. bartjc.gomez@gmail.com

      Eliminar
  26. Hola gracias por el aporte, pero a mi solo me aparece un pequeño símbolo en la parte superior izaquierda y nada más.¿que hago mal?

    Saludos y Gracias

    ResponderEliminar
  27. estoy tratando de hacerlo con un contador para mostrar grafica de niños y niñas por aula pero dice esto Fatal error: Call to a member function fetch_assoc() on a non-object in C:\wamp\www\siga\codigo.php on line 39
    Call Stack
    # Time Memory Function Location
    1 0.0004 383144 {main}( ) ..\codigo.php:0


    este es el codigo.

    fetch_assoc()){
    $usuarios[]=$row['des_sex'];
    $horas[]=$row['COUNT(*)'];
    }

    // Creamos el grafico
    $grafico = new Graph(500, 300, 'auto');
    $grafico->SetScale("textint");
    $grafico->title->Set("Ejemplo de Grafica");
    $grafico->xaxis->title->Set("Trabajadores");
    $grafico->xaxis->SetTickLabels($usuarios);
    $grafico->yaxis->title->Set("Horas Trabajadas");
    $barplot1 =new BarPlot($horas);
    // Un gradiente Horizontal de morados
    $barplot1->SetFillGradient("blue", "pink", GRAD_HOR);
    // 30 pixeles de ancho para cada barra
    $barplot1->SetWidth(40);
    $grafico->Add($barplot1);
    $grafico->Stroke();
    ?>

    Necesito de tu ayuda.

    ResponderEliminar
  28. este es el codigo completo, el anterior salio cortado...

    fetch_assoc()){
    $usuarios[]=$row['des_sex'];
    $horas[]=$row['COUNT(*)'];
    }

    // Creamos el grafico
    $grafico = new Graph(500, 300, 'auto');
    $grafico->SetScale("textint");
    $grafico->title->Set("Ejemplo de Grafica");
    $grafico->xaxis->title->Set("Trabajadores");
    $grafico->xaxis->SetTickLabels($usuarios);
    $grafico->yaxis->title->Set("Horas Trabajadas");
    $barplot1 =new BarPlot($horas);
    // Un gradiente Horizontal de morados
    $barplot1->SetFillGradient("blue", "pink", GRAD_HOR);
    // 30 pixeles de ancho para cada barra
    $barplot1->SetWidth(40);
    $grafico->Add($barplot1);
    $grafico->Stroke();
    ?>

    ResponderEliminar
  29. $_SESSION['cod_gra']=$_REQUEST['cod_gra'];
    $_SESSION['cod_sec']=$_REQUEST['cod_sec'];

    $variable1 = $_SESSION['cod_gra'];
    $variable2 = $_SESSION['cod_sec'];
    //echo 'variable de session = '. $variable1;
    //echo 'variable de session = '. $variable2;
    if ($variable1 == '00'){
    $prueba = " where a.cod_sex=d.cod_sex and a.cod_gra=b.cod_gra and a.cod_sec=c.cod_sec and a.cod_gra>='01' and a.cod_sec>='1' ";
    }else{
    $prueba = " where a.cod_sex=d.cod_sex and a.cod_gra=b.cod_gra and a.cod_sec=c.cod_sec and a.cod_gra='$variable1' and a.cod_sec='$variable2' ";
    }
    //$sql="select apell,nomb,ced_est,des_gra,des_sec,des_sex,COUNT(*)
    //from dat_alum a, tab_gra b, tab_sec c, tab_sex d " . " $prueba ". " group by des_sex ";

    $resultado=("SELECT apell,nomb,ced_est,des_gra,des_sec,des_sex,COUNT(*)
    from dat_alum a, tab_gra b, tab_sec c, tab_sex d " . " $prueba ". " group by des_sex");

    ResponderEliminar
    Respuestas
    1. el error atal error: Call to a member function fetch_assoc() on a non-object in generalmenrt sucede por que pones "" en las consultas donde es ' osea es un error en tu consulta intenta quitarle las comillas a prueba .$prueba.

      Eliminar
  30. Ojala alguien pueda ayudarme, quiero graficar las visitas en un sitio web, pero dividiéndolas por versión, Movil y Pc respectivamente pero no encuentro la manera de almacenar el contador en la BD para consultarlo y que haga la suma por versión.

    ResponderEliminar
  31. Hola Ary Lugo sigo sin poder hacer que me muestre la grafica despues de la consulta
    Fatal error: Call to a member function fetch_assoc() on a non-object in C:\AppServ\www\graficas\graficas.php on line 10

    este es el codigo, checalo y dime que esta mal porfavor y de antemano gracias

    connect_errno){
    }
    $resultado=$mysqli->query('SELECT users.nombre,horas.horas from users,horas where users.id=horas.id_usuario');
    $usuarios=array();
    $horas=array();
    while($row=$resultado->fetch_assoc()){
    $usuarios[]=$row['nombre'];
    $horas[]=$row['horas'];
    }
    $grafico = new Graph(500, 400, 'auto');
    $grafico->SetScale("textint");
    $grafico->title->Set("Ejemplo de Grafica");
    $grafico->xaxis->title->Set("Trabajadores");
    $grafico->xaxis->SetTickLabels($usuarios);
    $grafico->yaxis->title->Set("Horas Trabajadas");
    $barplot1 =new BarPlot($horas);
    // Un gradiente Horizontal de morados
    $barplot1->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR);
    // 30 pixeles de ancho para cada barra
    $barplot1->SetWidth(30);
    $grafico->Add($barplot1);
    $grafico->Stroke();
    ?>

    necesito tu ayuda

    ResponderEliminar
    Respuestas
    1. como ya comente antes el error fetch assoc es problma con la consulta a tu base de datos, y pues me estas pasando el código exactamnete igual al ejemplo pero no me pasas como tienes tu base de datos. revisa que tus campos en la base de datos se llamen exactamente igual a como estas haciendo la consulta

      Eliminar
  32. hola Ary Lugo a mi me da el mismo error fetch_assoc() en esta linea, tengo la misma base de datos con los mismos atributos

    ResponderEliminar
  33. oye ya no me da error pero necesito saber eso de la etiqueta imagen de que hablas, por que al correr el programa solo muestra un icono muy pequeño de imagen, pero nada mas, algo asi cuando una imagen no carga bien

    ResponderEliminar
    Respuestas
    1. Cuando desde otro archivo mandas llamar la grafica como imagen lo unico que tienes que hacer es poner el atributo src de la imagen la ruta de tu archivo php

      Eliminar
    2. checa este ejemplo http://easy-codigo.blogspot.mx/2012/06/graficas-con-jpgraph.html

      Eliminar
  34. No se como creear una base de datos me podrian pasar la base de datos de ese ejemplo porfavor y me sale este error

    Fatal error: Call to a member function fetch_assoc() on a non-object in C:\xampp\htdocs\graficos\stadisticas.php on line 16

    gracias muy amable

    ResponderEliminar
    Respuestas
    1. Hola mira para ver como hacer una base de datos o como conectarte a una en php checa este tutorial http://easy-codigo.blogspot.mx/2012/06/consultas-en-mysql-y-php.html

      y pues ese error es de hcho por la consulta si tienes mal o no tienes base pues por es te manda error en la consulta.

      Eliminar
  35. hola muy buen aporte gracias ami me funciono de esta forma
    connect_errno)
    {
    echo "fallo al conectar a MYSQL:(".$mysqli->connect_errno.")".$mysqli->connect_errno;
    }
    //Consulta
    $resultado="SELECT users.nombre,horas.horas from users, horas where users.id=horas.id_usuarios";
    $usuarios=array();
    $horas=array();

    //Recorre el resultado de la consulta y los almacena en los arreglos
    /*$resultado1=mysqli_query($mysqli, $resultado);*/
    if($result = $mysqli->query($resultado))
    {
    while($row = $result->fetch_assoc())
    {
    $usuarios[]=$row['nombre'];
    $horas[]=$row['horas'];
    }
    //liberar el resultado
    $result->free();
    }
    $mysqli->close();

    //creamos los grficos
    /*$datos=array(6,5,8,6);
    $labels=array('pepe','juanita','maria','luis');*/

    $grafico= new Graph(500,400,'auto');
    $grafico->SetScale("textint");
    $grafico->title->Set("Ejemplo de grafica");
    $grafico->xaxis->title->Set("Trabajadores");
    $grafico->xaxis->SetTickLabels($usuarios);
    $grafico->yaxis->title->Set("Horas Trabajadas");
    $barplot1=new BarPlot($horas);

    //U gradiente horizontal de morado
    $barplot1->SetFillGradient("#BE81F7","#E3CEF6",GRAD_HOR);

    //30 pixeles de ancho para cada barra
    $barplot1->SetWidth(30);
    $grafico->Add($barplot1);
    $grafico->Stroke();
    ?>

    ResponderEliminar
  36. Que bueno y util es jpgraph. Excelente aporte.
    ¿Como puedo configurar la ruta para la imagen que genera jpgraph?.
    Gracias!!!

    ResponderEliminar
    Respuestas
    1. checa este ejemplo para ver si es lo que necesitas.
      http://easy-codigo.blogspot.mx/2013/07/jpgraph-como-guardar-la-grafica-en-un.html

      convierte el resultado de tu archivo php en imagen y lo guarda en la ruta local (donde esta tu archivo php, pero pues puedes añadirle una ruta diferente)

      Eliminar
  37. hola buenas noches

    esta excelente el aporte pero tengo una pregunta: como haria yo para que me grafique datos de dos tablas relacionadas en un solo grafico

    Gracias

    ResponderEliminar
  38. Hola, gracias de antemano por compartir tus códigos y ser de gran ayuda...
    He probado hacer la conexión a mi base datos en postgres y luego llenar los arreglos, hasta esa parte funciona bien pero cuando incorporo el código para generar el gráfico no despliega nada solo un icono...este es mi código, si alguien me puede ayudar y de decir que debo hacer...

    include ("includes/databaseds.php");

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

    $con= pg_connect("host=$dbHost dbname=$dbDatabase1 user=$dbUser password=$dbPass") or die ("Error.");

    $query1 = "select date_charge, data_package from charges where main_id='123' ";
    $result1 = pg_query($con, $query1) or die ('2Error');
    $reg = pg_fetch_array($result1);
    $usuarios=array();
    $horas=array();

    while($reg) {
    $usuarios[]=$reg[0];
    $horas[]=$reg[1];

    $reg = pg_fetch_array($result1);

    }
    // hasta aqui probe y si estan con datos los arreglos
    // Creamos el grafico
    $grafico = new Graph(500, 400, 'auto');
    $grafico->SetScale("textint");
    $grafico->title->Set("Ejemplo de Grafica");
    $grafico->xaxis->title->Set("Trabajadores");
    $grafico->xaxis->SetTickLabels($usuarios);
    $grafico->yaxis->title->Set("Horas Trabajadas");
    $barplot1 =new BarPlot($horas);
    // Un gradiente Horizontal de morados
    $barplot1->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR);
    // 30 pixeles de ancho para cada barra
    $barplot1->SetWidth(30);
    $grafico->Add($barplot1);
    $grafico->Stroke();

    ResponderEliminar
    Respuestas
    1. antes de moverle a otra cosa cambia de posición los includes, deben de ir primero los jpGraph y luego databaseds.php

      Eliminar
    2. Gracias por responder, hice tu sugerencia y sigue sin funcionar solo me despliega un icono de imagen y nada mas...ya no se que mas hacer y me urge solucionar este problema, tienes alguna sugerencia mas? si hago el ejemplo simple sin conexión a base de datos despliega la gráfica, mi problema surge cuando hago la conexión y como mencione anteriormente fui probando linea a linea y si carga los arrays con los datos, pero no da la parte del gráfico...ayuda por favor!!!!

      Eliminar
    3. revisa que no tengas ningun echo antes de la gráfica revisa tambien en tu archivo db. no debe haber nada que se mande imprimir antes de la gráfica

      Eliminar
    4. He probado incluso con lineas...cuando cargo manualmente los arrays funcionan los gráficos pero cuando los cargo desde la base de datos ( y probé que si estén con datos los array) no despliega nada mas que un icono, sera que existe algo de incompatibilidad? busque por todo lado la forma de arreglar este problema y no encontré nada, por favor necesito ayuda urgente

      Eliminar
  39. Hola:
    Mi consulta es cómo puedo solucionar un problema que tengo con los juegos de carateres ya que no encuentro una forma para que las letras salgan con tildes.

    ResponderEliminar
    Respuestas
    1. es el tipo de codificación que tengas en tu pagina UTF-8 o ISo, la manera en que manejo las tildes para que se visualicen bien en html es con el ´
      por ejemplo la palbra papá lo pondría papá
      y se visualizará correctamente.
      es &(caracter que lleva acento)acute;

      Eliminar
    2. perdon es que es &+acute; el + sería el caacter que lleva la tilde

      Eliminar
  40. excelente turorial gracias!!
    mi unica duda seria como puedo meter dicha grafica en un bloque

    ResponderEliminar
  41. hola que tal, lo he calado de varias formas no tengo ningun echo y me muestra error al mostrar la imagen de la grafica

    ResponderEliminar
  42. como le puedo colocar los valores que posee cada barra? ademas de eso como puedo redireccionar desde la pagina que crea el grafico para otra donde lo puedo invocar con agradezco su ayuda

    ResponderEliminar
    Respuestas
    1. HOla para poner los valores a cada barra agrega $barplot1->value->Show(); antes del $grafico->Add() y para invocarla desde otra página se grega como si fuera una imagen y en src="" de la imagen pones la ruta a tu archivo php donde estas creando la gráfica.
      http://easy-codigo.blogspot.mx/2012/06/graficas-con-jpgraph.html en esta entrada hay un ejemplo. Saludos y gracias por dejar tu mensaje espero haberte ayudado.

      Eliminar
  43. Quierp pasar un parametro post

    $var1=$_POST[fecha];

    apenas agrego esto ya no me genera la grafica

    ResponderEliminar
    Respuestas
    1. Hola aqui tengo un ejemplo pasandole parametros. recuerda que no debes mandar imprimir nada antes de la grafica.
      y posiblemente segun lo que veo es que le faltan las comillas a tu ["fecha"]
      http://easy-codigo.blogspot.mx/2013/04/graficas-con-jpgraph-desde-un.html

      Eliminar
  44. como puedo graficar datos con mas de 2 variables en el eje x

    ResponderEliminar
  45. Hola, estoy haciendo un formulario en HTML y luego quiero conectar con la grafica como puedo hacerlo ayudaaa

    ResponderEliminar
    Respuestas
    1. checate este ejemplo http://easy-codigo.blogspot.mx/2013/04/graficas-con-jpgraph-desde-un.html?showComment=1414511685663#c6011735290888478093

      Eliminar
    2. Hola, estoy intentando hacer el gráfico a partir de arreglos que ya he creado consultando por bd con la información que me traje de un formulario, tengo el archivo con la informacion pero no se como incluir el grafico alli ..

      Eliminar
  46. como hacer para que la numeracion del eje de las Y se visualize de de arriba hacia abajo

    ResponderEliminar
    Respuestas
    1. mmm no entiendo quieres que el eje de Y empiece en el mayor eso creo que no es lógico.

      Eliminar
  47. Hola, realize mi codigo y al insertarlo en un div de los que tengo en mi pagina, meda el siguiente error:
    JpGraph Error: HTTP headers have already been sent.
    Caused by output from file est_uno.php at line 15.
    Tienes alguna idea, de porque sucede esto??? Agradeceria mucho que me orientes por favor. Gracias, en verdad, me resultó muy útil tu aporte.

    ResponderEliminar
    Respuestas
    1. El codigo php lo tienes en el mismo archivo que tu html o lo estas mandando llamar por medio de una imagen? Por que puede ser que si tienen junto el codigo el problema sea que no debes mandar imprimir nada antes de la grafica prueba con este ejemplo http://easy-codigo.blogspot.mx/2013/04/graficas-con-jpgraph-desde-un.html ahi tengo un formulario html y mandamos llamar la grafica desde una imagen.

      Eliminar
  48. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  49. Estimado Muchas gracias por el código, me funciona a la perfección, pero tengo un detalle que quizás me podrías ayudar... en el eje Y estoy trabajando con número grandes por lo que el contorno blanco que rodea el gráfico termina cortando mis número grandes. ¿dónde puedo modificar el código para hacer ese margen blanco más ancho?
    Muchas gracias desde ya amigazo.

    ResponderEliminar
  50. Buen dia me aparece este error pero tengo descargada la libreria jpgraph-4.2.2.tar.gz pero me muestra esto
    Advertencia : require_once (jpgraph / src / jpgraph.php): no se pudo abrir la secuencia: No existe ningún archivo o directorio en C: \ xampp \ htdocs \ prueba 22082018 \ prueba.php en la línea 2

    Error fatal : require_once (): Falló la apertura requerida 'jpgraph / src / jpgraph.php' (include_path = 'C: \ xampp \ php \ PEAR') en C: \ xampp \ htdocs \ prueba 22082018 \ prueba.php en la línea 2

    ResponderEliminar
  51. Hola mi gente, tengo una duda, como coloco el valor de cada barra en la parte de arriba de cada barra, se que es $barplot1->value->Show(); antes de $grafico->Add($barplot1); pero no me funciona

    ResponderEliminar
  52. este es mi código:
    connect_errno){
    // echo "Fallo al conectar a MySQL:(". $mysqli->connect_errno.")". $mysqli->connect_errno;
    }

    //Consulta
    $resultado=$mysqli->query("SELECT * from tiptas, registro_tasas where tiptas.id=registro_tasas.tipo group by tipo");

    //arreglos donde se guardaran los resultados de la consulta.
    $usuarios=array();
    $horas=array();
    //Recorre el resultado de la consulta y los almacena en los arreglos
    while($row=$resultado->fetch_assoc()){
    $usuarios[]=$row['nombre'];
    $id_tiptas[]=$row['cantidad'];
    }

    $horas=array();


    // Creamos el grafico
    $grafico = new Graph(600, 400, 'auto');
    $grafico->SetScale("textint");
    $grafico->title->Set("Ejemplo de Grafica");
    $grafico->xaxis->title->Set("Trabajadores");
    $grafico->xaxis->SetTickLabels($usuarios);
    $grafico->yaxis->title->Set("Cantidad de Tasas");
    $barplot1 =new BarPlot($id_tiptas);
    // Un gradiente Horizontal de morados
    $barplot1->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR);
    // 30 pixeles de ancho para cada barra//
    $barplot1->SetWidth(30);
    $barplot1->value->Show();
    $grafico->Add($barplot1);
    $grafico->Stroke();
    ?>
    diganme que tengo malo

    ResponderEliminar