http://tednologia.com/top-10-librerias-graficos-php/
Pero en este caso vamos a usar la libreria JPGraph el resultado final seria como la siguiente imagen:
vamos a utilizar jpgraph por que es muy sencilla de utilizar y el formato que maneja de tipo imagen, a diferencia de otras clases que nos generan la grafica en formato flash. Es importante recordar que muchos usuarios no tienen instalados los pluggins para visualizar flash en su navegador, si yo se que que en estos tiempos quien no lo va a tener... pues aunque no lo crean son MUCHOS....
Bueno lo primero es descargar la libreria y para eso nos vamos a la pagina oficial.
http://jpgraph.net/download/index.php
La version mas actual es la 3.5 , la cual solo funciona PHP 5.1 en adelante.
Se descomprime y nos da de resultado una carpeta con el nombre de la libreria, esta carpeta la vamos a pegar en la carpeta donde vamos a generar nuestro proyecto.
Ahora creamos un archivo de PHP lo voy a llamar graficas.php y vamos a poner el siguiente código:
<?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("textlin");
$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);
$barplot1->SetWidth(30); // 30 pixeles de ancho para cada barra
$grafico->Add($barplot1);
$grafico->Stroke();
?>
Si corremos el código nos va a mostrar la grafica como la siguiente imagen.
Ahora veamos un poquito el código:
Las primeras lineas es para mandar llamar la clase principal de la libreria que es Jpgraph recuerden que pegamos la carpeta de la libreria a la carpeta del proyecto, en mi caso le quite al nombre de la carpeta el numero de version y la deje en jpgraph.
Después mandamos llamar la clase especifica para el tipo de gráfica de barras que es la que estamos creando. Para cada tipo de gráfica se manda llamar su clase.
Después declare dos variables de tipo array que son $datos y $labels, $datos va a contener en este caso las horas que ha trabajado respectivamente cada uno de nuestros trabajadores, y $labels va a contener los nombres de los trabajadores.
Ahora si a crear la gráfica la variable $grafico que crea un nuevo objeto de tipo Graph y se le esta dando un tamaño de 500px de ancho y 400px de alto y un margen automatico. Es aqui donde se modifica el tamaño.
SetScale especifica las escalas de x/y puede variar según nuestras necesidades "text" es para x y lin es para y para ver las diferentes combinaciones puedes ver mas en los ejemplo que la misma libreria te brinda.
"$grafico->title" Es el nombre que queremos que aparezca en la parte superior de la gráfica.
"xaxis->title->Set" Es el nombre que queremos que aparesca de nuestros datos en el eje x en nuestro ejemplo es trabajadores.
"xaxis->SetTickLabels" Este campo es opcional si no lo ponemos la gráfica mostraría por default números del 1 al 4 en lugar de pepe, juanita,maria y luis.
"yaxis->title->Set" Es el nombre que queremos que aparesca de nuestros datos en el eje y en nuestro ejemplo es Horas trabajadas.
$barplot1 =new BarPlot($datos); Aquí le vamos a pasar los datos que queremos graficar y que son los que le daran la altura a nuestra barras.
$barplot1->SetWidth(30); Le indicamos el ancho de nuestras barras en esta caso 30px.
$grafico->Add($barplot1); La añade al gráfico.
$grafico->Stroke(); La traza.
Hay otras características que se pueden añadir por ejemplo el efecto de degradado, para hacer esto solo hay que añadir la linea después de $barplot=new BarPlot($datos):
$barplot1->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR); le pasamos los colores y le indicamos que queremos un degradado horizontal. Tambien le vamos a cambiar el SetScale que explicabamos antes, en lugar de "textlin" lo vamos a cambiar a "textint" esto es para que nos muestre los números del eje "y" como enteros.
El código quedaria de la siguiente manera.
<?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();
?>
la imagen quedaría de la siguiente manera:
para mandarle llamar desde un archivo html es tan sencillo como poner en el código un elemento imagen y en el atributo src le damos la ruta hacia nuestro archivo php.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>graficas</title>
</head>
<body>
<span>Aqui mostramos la grafica por medio de una imagen</span>
<img src="graficas.php" />
</body>
</html>
mi archivo html se llama index.html por lo que cuando entro a mi carpeta en el navegador automaticamente lo corre.
Nota: Como dato extra no se debe mandar imprimir desde el archivo php ningún dato, ya que esto podría marcar error. Pasar los datos de consultas o pasarlos por post tambien es muy sencillo solo es cuestión de que vayas practicando, en la carpeta src de la libreria viene una carpeta con muchísimos ejemplos para que los revises y veas otras opciones como juntar dos tipo de grafica en una sola, etc.
Espero que este pequeño tutorial te sirva de algo cualquier duda o comentario es bien recibido.
ACTUALIZACION
Les comento que hay una segunda parte de este tutorial en donde pueden cargar los datos desde una consulta en mysql. les dejo el enlace gracias por su visita.
"Programar no tiene que ser tan difícil como parece...."
No puedo creer que nadie te haya comentado nada
ResponderEliminaresta genial el tutorial
muy pero muy util
gracias
saludos desde Argentina
Muchas gracias por tu comentario. Me da mucho gusto saber que a alguien le sirvió como a mi en su momento. saludos desde México.
EliminarHola me gustaria saber si hay manera de darle una escala fija al eje y
EliminarGracias
Hola pues siguiendo este ejemplo si por ejemplo quisieras que en el eje Y aparecieran los valores de cada barra sería utlizando la siguiente linea
Eliminar$grafico->yaxis->SetTickPositions($s1);
donde $s1 es el arrray que contiene los valores de las barras pero igual podrías probar utilizando un array distitno con valores de 10 en 10 por ejemplo.
$grafico->yaxis->SetTickPositions(array(0,10, 20, 30,40));
Espero que sea lo que necesitas!! saludos
Muchas gracias me fue de gran utilidad.
ResponderEliminarSaludos desde Bogotá Colombia
Gracias por tomarte el tiempo de dejar el comentario, me da mucho gusto que te haya servido este ejemplo. Saludos desde México.
EliminarUna pregunta si quiero implementarlo en una empresa? supongo que no es valido por la licencia?
ResponderEliminarBueno si entras a la página verás que tiene una sección donde ofrece una profesional version lo puedes comprar y entonces si tienes el derecho de usarlo de manera comercial, incluye más opciones de gráficas.
EliminarGracias por pasar al blog te mando un saludo grande.
Muchas gracias por el tuto lo modifique para que interactuara con mysql y me dio muy buen resultado gracias
ResponderEliminarMe da mucho gusto que te haya servido el ejemplo, y pues de eso trata esto buscar un poco de ayuda y adaptarla a tus necesidades.. saludos y gracias por dejar tu comentario. :D
EliminarHola buen tuto, pero tengo dudas, como podria realizar este tipo de graficas pero de manera dinamica usando mysql, ya que he intentado realizar unas pruebas pero no me funciona. Saludos desde Edo. de Mex.
ResponderEliminarDisculpa que te haya contestado tan tarde pero gracias tu comentario me di a la tarea de crear este tutorial para ver si puedo ayudar a resolver tu duda.
Eliminarhttp://easy-codigo.blogspot.mx/2013/03/graficas-con-jpgraph-y-mysql.html
Muchas gracias por tu comentario. saludos.
Gracias por tu ayuda. Quisiera saber como podria enviar los dtos via jquery par asi armar el grafico segun ciertas condiciones que ponga el usuario. Gracias
ResponderEliminarHola y disculpa que te conteste tan tarde jeje andaba de vacaciones!! bueno en base a tu comentario hice este ejemplo http://easy-codigo.blogspot.mx/2013/04/graficas-con-jpgraph-desde-un.html no se si es lo que necesitabas pero tal vez te ayude.
EliminarMuchas gracias por visitar el blog. Saludos y que te encuentres bien. :D
hola que tal , segui el tutorial tal como lo indica y no me mando nada
ResponderEliminarya verifique que el html donde se manda llamar al archivo del php coincida pero no , sera acaso algun detalle de las librerias
require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_bar.php');
saludos !!
mmm.. si acuerdate que la ruta es muy importante si no has cambiado el nombre de la carpeta que descargaste tienes que agregar el nombre completo casi siempre es JPGRAPH-version-etc.
EliminarChecalo, tambien checa que no estes mandanado ningun echo antes de que se genera la grafica.
Tambien puedes intentar correr el php para ver que te este generandp la grafica, si la muestra entonces el error esta al mandar llamar el archivo php del html checa la ruta
Eliminarbuenas, a mi me marca este error:
EliminarWarning: require_once(jpgraph/src/jpgraph.php): failed to open stream: No such file or directory in C:\AppServ\www\sistema\view\index.php on line 3
Fatal error: require_once(): Failed opening required 'jpgraph/src/jpgraph.php' (include_path='.;C:\php\pear') in C:\AppServ\www\sistema\view\index.php on line 3
estaba usando open flash chart , pero tu ejemplo me parecio interesante ya que quiero crear una grafica atravez de una consulta
ResponderEliminarSuper!! que bueno que te animaste tambien agregue un ejemplo muy básico de como crear una gráfica en base a un formulario, saludos y gracias por pasar...
Eliminardonde esta ese tutorial, lo necesito :(
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola bro, quisiera preguntarte como haria para que sobre cada barra me aparezca el valor exacto? gracias de antemano
ResponderEliminarHola fijate que buena pregunta!! no he visto he intentado esa parte, pero la voy a checar gracias por dejar tu comentario saludos!!!
EliminarHola!
ResponderEliminardisculpa quise hacer el mismo ejemplo del tuto, pero solo me sale el mensaje, no entiendo por que no me sale la imagen....
corre primero el archivo php te debe generar la gráfica si no te la muestra el error esta en ese archivo, por el contrario el error esta ebn la ruta que le estas dando a la imagen.
EliminarRecuerda que no debes mandar imprimir nada antes de la imagen en el archivo php
Hola que genial tutorial, te tengo una pregunta como aria para el manejo de color de cada barra y poder agregarle una animacion..
ResponderEliminarHola, que bueno que pasas pr aca, lamento no poder ayudarte en otro comentario tambien alguien me comentaba acerca de los colores para cada barra pero la verdad no he podido hacer funcionar el ejemplo aún sigo trabajando en eso y con respecto a la animación si te refieres a una animación de fondo o imagen de fondo en la carpeta de Examples de la librería viene algunos ejercicios y con la linea $graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLPLOT); le indica la ruta de la imagen. Tambien he visto algunos ejemplos para poner imagenes en la graficas de linea. pero si te refieres a que las barras tengan movimiento eso si no lo he visto en los ejemplos.
EliminarLamento no poder ayudarte pero igual y si encuentras algún ejemplo te agradecerías que lo compartieras para complementar más esta sección del blog.
Saludos y que estes bien :D
estimado como me puedo poner en contacto contigo? quiero ver si puedo poner el la informacion inferior algo ladeada... asi
ResponderEliminarhttp://www.ispch.cl/sites/default/files/u43/grafico1_rabia.jpg
si te fijas los años estan ladeados hacia un lado se podra hacer eso?
Hola!! gracias pr pasar al blog intentalo poniendo esta linea
Eliminar$grafico->xaxis->SetLabelAngle(45);
debajo de $grafico->xaxis->SetTickLabels($labels);
Saludos!!
Muy buena respuesta exacta y precisa
EliminarMuchas Gracias funciono exelente.
Hola Buenas noches, como esta excelente el tutorial, habria alguna manera de enviarlo con email ese grafico????
ResponderEliminarClaro que se puede, en otro de los tutoriales muestro como puedes guardar la grafica como imagen y con el phpMailer (es una librería que te yuda al envio de correos electrónicos) puedes mandar como dato adjunto la imagen. http://phpmailer.worxware.com/ checah esta página es la oficial de phpmailer.
EliminarExcelente tutorial, fue de gran utilidad
ResponderEliminarGracias por dejar tu mensaje!! y me alegra que te haya servido. saludos..
EliminarBuen día, primero que nada Muchas GRACIAS por el tutorial esta muy bueno, me acabas de salvar la vida :-)
ResponderEliminarOye el tipo de gráfico se puede cambiar, por ejemplo por uno de lineas?
saludos y de nuevo gracias
Hola y Gracias por pasar al Blog y dejar tu comentario.
EliminarClaro que se puede cambiar el tipo de gráfica solo tienes que mandar llamar la librería adecuada paa cada tipo y donde declaras el nuevo objeto cambiaría tambien por ejemplo e dejo el link de mi ejemplo de gráfica de lineas http://easy-codigo.blogspot.mx/2013/05/graficas-con-jpgraph-grafica-de-linea.html
Puede ver que cambia de new BarPlot a new LinePlot.
Muchas gracias por el tutorial, me fue de gran ayuda, saludos desde Paraguay.
ResponderEliminarGracias por el tutorial, solo tuve un problema.. la linea de Stroke() no me funciona, tienes alguna idea de porque al declarar la traza haya problemas??
ResponderEliminarpuedes poner esas ultimas lineas de código para ver como las estas usando por que se me hece muy raro que solo en el Stroke te falle.
Eliminarel programa esta igual :)..
Eliminarrequire_once ('C:/php/jpgraph/src/jpgraph.php');
require_once ('C:/php/jpgraph/src/jpgraph_bar.php');
// Creamos el grafico
$datos=array(6,5,8,6); // Datos de las barras
$labels=array("pepe","juanita","Maria","Luis"); // Arreglo para crear las barras
$grafico = new Graph(500, 400, 'auto'); // Crea un nuevo objeto de tipo Graph
$grafico->SetScale("textlin"); //Especifica las escalas de x/y puede variar según nuestras necesidades "text" es para x y lin es para y para ver las diferentes combinaciones puedes ver mas en los ejemplo que la misma libreria te brinda.
$grafico->title->Set("Ejemplo de Grafica"); // Es el nombre que queremos que aparezca en la parte superior de la gráfica.
$grafico->xaxis->title->Set("trabajadores");//Es el nombre que queremos que aparesca de nuestros datos en el eje x en nuestro ejemplo es trabajadores.
$grafico->xaxis->SetTickLabels($labels); //Este campo es opcional si no lo ponemos la gráfica mostraría por default números del 1 al 4 en lugar de pepe, juanita,maria y luis.
$grafico->yaxis->title->Set("Horas Trabajadas"); //Es el nombre que queremos que aparesca de nuestros datos en el eje y en nuestro ejemplo es Horas trabajadas
$barplot1 =new BarPlot($datos); // Aquí le vamos a pasar los datos que queremos graficar y que son los que le daran la altura a nuestra barras.
$barplot1->SetWidth(30); // 30 pixeles de ancho para cada barra
$grafico->Add($barplot1);// La añade al grafico
$grafico->Stroke();//La traza
.........
al momento de ejecutarlo me aparece una pantalla negra donde dice que mi programa tiene errores
hola buenas gracias por el aporte es genial gracias a el lo hice correr
ResponderEliminarlo unico tengo un problema añadido y no encuentro documentacion de ello
mi problema es que ya ejecuto graficas de barras que me sirven de indicadores con un objetivo especifico por ejemplo porcentajes cuando el indicador del mes no llega a ese porcentaje se ponga de color rojo (por ejemplo) y cuando llega o pasa se quede de color azul
ahora mismo la grafica es normal todos los indicadores son del mismo color
hay posibilidad de que nos de esa funcion?
esperando respuesta
muchisimas gracias.
Personas como tu hacen de este mundo un lugar maravilloso,gracias por tu aporte
ResponderEliminarMuchas gracias por tu comentario que tengas buen fin de semana :D
Eliminar:O Solo me manda una imagen rota :O qué será?
ResponderEliminarcheca que estas poniendo bien las rutas de las librerias
EliminarMUY BIEN... AHORA VERÉ EL SIGUIENTE TUTORIAL QUE ME VA A SACAR DE UN APURO.
ResponderEliminarMe encanto este tutorial "Ary Lugo" Me Salvaste y gracias a ti estoy guiandome en este mundo de las graficas con librerias estaba ya desesperado porq pensaba q no me servia y corri tu ejemplo y me sirvio estoy intentando con consultas de Mysql . Ven tu sabes o alguien sabe porque algunas graficas SE ME MUESTRAN COMO UNA IMAGEN PEQUEÑA CON UNA X EN EL CENTRO ? NO SE PORQ SALEN CREERIA QUE ESTA MAL O NO SIRVA LA LIBRERIA?
ResponderEliminarCuando estaba checando los ejemplos que trae la libreria algunos no funcioanaban y me di cuenta que faltaban algunos archivos como templates y así. Puede ser que falte algun archivo que estas intentando cargar o que la ruta no sea correcta
EliminarMuchas gracias por tu comentario y me da muchisimo gusto que te haya servido el ejercicio Saludos!!!
EliminarEsta muy bueno tu ejemplo para hacer gráficas, el detalle es que cuando quiero hacer varias gráficas , solo me dibuja la primera, tengo un archivo llamado index.php en el cual se dibujan las graficas, las tengo con diferentes valores y variables, espero me puedas ayudar para hacer diferentes graficas en el mismo archivo php
ResponderEliminarEs muy bueno , necesito saber como podria traer datos para graficarlos asi desde una base de datos de mysql, con fechas por ejemplo eje y (1,3,5,9) eje x (2014-01-01,2014-01-02,2014-01-03,2014-01-01) pero estos datos son un array de la consulta en mysql
ResponderEliminarHola pues tengo otro tutorial cehca el link y ojala sea lo que andas buscando http://easy-codigo.blogspot.mx/2013/03/graficas-con-jpgraph-y-mysql.html Saludos!!
EliminarHols q tal!
ResponderEliminarGracias por el tutorial esta buenisimo y bien explicado
Pero tengo un problemita a ver si m puedes ayudar
lo q pasa es q cuando corro el archivo php la imagen m sale rota
espero m puedas ayudar
si corres el php directamente y te sale rota pueden ser las rutas de las librerias si lo estas corriendo desde el html y la imagen sale rota puede ser la ruta que le das a la imagen.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola :). tu blog esta buenisimo..tengo un problema qe aun no le doi solucion es que me muestra la imagen rota... la ruta esta bien ..porfa ayuda :(
ResponderEliminarHola desde cual archivo estas corriendo? Intenta antes de hacer el llamado desde html corriendo el php si el php esta correcto y te muestra bien tu gráfica entonces si estas poniendo mla la etiqueta de imagen o la ruta.
EliminarSi el problema tambien te lo presnta al correr el php entonces podrías revisar las rutas a las librerias.
como es correr desde html, tengo el mismo problema de imagen rota! excelente tuto
EliminarNo es correr desde html, lo que comente fue que ejecute el puro archivo php , si al ejecutarlo en la pantalla te muestra la gráfica entonces algo esta mal al hacer la imagen en el archivo html, pero si tampoco te genera la gráfica entonces algo esta mal en el archivo php y necesitas empezar por revisar la ruta de las librerías.
EliminarDe 10, justo lo que estaba buscando. Muchas gracias, saludos desde Jujuy - Argentina.
ResponderEliminarMuchas gracias ,. ! genial
ResponderEliminarHola, como puedo contactarte? Saludos
ResponderEliminarHola pues me puedes mandar un mail a aryvetlugo@gmail.com si necesitas apoyo con algo y yo te ayudaré en las medidas de mis posibilidades.. saludos
EliminarTremenedo tutorial. Felicitacion Ary lugo.
ResponderEliminarMuhas gracias por tu comentario te invito a que sigas viendo los demás tutoriales para Jpgraph. Saludos
EliminarHola, buen tutorial, me pregunto si es posible mandar imprimir el gáfico ya generado o directamente, saludos
ResponderEliminarMira aqui te dejo el link de otro de los ejemplos que hice de JPGRAPH ahí lo manejamos de html y te explico como mandarlo llamar como imagen http://easy-codigo.blogspot.mx/2013/04/graficas-con-jpgraph-desde-un.html
EliminarCreo que formulé mal mi pregunta, quisiera saber si hay manera de mandar el grafico a una impresora mediante html ya generada la imagen o mediante algún comando que en lugar de mandarla al monitor lo mande a la impresora, saludos
Eliminara ok si ya tienes la grafica como imagen lo que puedes hacer es poner en una funcion de js lo siguiente:
Eliminarfunction imprimir(){
var imagen="img src='imagen.png' alt='imagen que quieres imprimir' ";
w=window.open();
w.document.write(imagen);
w.print();
w.close();
}
Lo que estoy haciendo ahí es crear una nueva pantalla que solo va a estar ativa para imprimir y con a esta pantalla le agregamos la imagen que en este caso seria lla grafica.
Y con la funcion print() mandas llamar la ventana de impresion del navegador y al imprimir se cierra de manera automática esa pantalla.
Ahora esta funcion la puedes mandar desde un bóton o desde otra funcion y la ruta de la imagen la puedes pasar como parámetro.
NOTA: aveces en los navegadores hay que configurar la impresion para que te imprima fondo e imagenes si no solo te va a imprimir el ALt de la imagen o te va a salir en blanco la impresión.
Otra NOTA este código de rriba le falta a la variable imagen los signos de < y > que cierra por que los comentarios no me permiten poner codigos de imagen
EXCELENTE INFORMACION
ResponderEliminartenia tiempo que no revisadba como hacer uso del jpgraph
Gracias por dejar tu comentario. saludos
EliminarGracias... <3
ResponderEliminarGracias a ti por tomarte el tiempo de dejar tu comentario!! Saludos
EliminarHola!! me ha parecido genial este tuto. Muchas gracias por el desarrollo! He seguido los pasos que comentas pero cuando corro el codigo graficas.php me devuelve el siguiente mensaje: PHP Warning: Use of undefined constant IMG_PNG - assumed 'IMG_PNG' (this will throw an Error in a future version of PHP) in C:\inetpub\wwwroot\PHP\Graficas\jpgraph\src\jpgraph_errhandler.inc.php on line 282
ResponderEliminarPHP Warning: A non-numeric value encountered in C:\inetpub\wwwroot\PHP\Graficas\jpgraph\src\jpgraph_errhandler.inc.php on line 282
Aclarando que he cambiado el nombre de la carpeta a "jpgraph".
Puedes ayudarme con este punto?
Muchas gracias por todo y buena suerte!