Foros del Web » Programando para Internet » PHP »

Problemas con jpgraph??

Estas en el tema de Problemas con jpgraph?? en el foro de PHP en Foros del Web. Hola amigos: saben que estoy trabajando con jpgraph para realizar graficos estadisticos, me funciona super bien, pero solo tengo un problema: no me entrega los ...
  #1 (permalink)  
Antiguo 23/07/2004, 10:41
 
Fecha de Ingreso: abril-2003
Ubicación: 127.0.0.1
Mensajes: 359
Antigüedad: 21 años
Puntos: 0
Problemas con jpgraph??

Hola amigos:

saben que estoy trabajando con jpgraph para realizar graficos estadisticos, me funciona super bien, pero solo tengo un problema:

no me entrega los valores correctos de la base de datos, alguien de ustedes tendra algun ejemplo realizado en jpgraph con consultas mysql y ke le entrege los resultados de dicha consulta realizada a la base de datos, si alguien tiene dicho ejemplo porfavor lo podria postear para poder resolver mis dudas.


espero contar con la ayuda de ustedes. de antemano muchas gracias....
__________________
Practicando se Aprede
:-) :-)
  #2 (permalink)  
Antiguo 23/07/2004, 11:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La pregunta mía sería:

¿Has comprobado que la consulta SQL que haces a tu BD te está arrojando los datos esperados que requiere a su vez dicha classe de generación de gráficas?

Un saludo,
  #3 (permalink)  
Antiguo 23/07/2004, 11:38
 
Fecha de Ingreso: abril-2003
Ubicación: 127.0.0.1
Mensajes: 359
Antigüedad: 21 años
Puntos: 0
Exclamación

si me entrega valores la consulta SQL

este es el codigo:
Código PHP:
<?php 

include ("../funcion/conexion.php");
mysql_connect($host,$usuarioBD,$contaseñaBD);
mysql_select_db(fullsis);
$result mysql_db_query("$base_de_datos","select observa from $tabla  GROUP BY observa");
while(
$row mysql_fetch_array($result)){ 
/*$result3 = mysql_db_query("$base_de_datos","select * from $tabla where tipo='t' order by tipo");
        $total = mysql_num_rows($result3);
        $numGols[] = $total;
    */
    
$datax[] = $result
     
}
include (
"src/jpgraph.php");
include (
"src/jpgraph_pie.php");
include (
"src/jpgraph_pie3d.php");


// Some data 
//$data = array(20,27,45,75,90); 

// Create the Pie Graph. 
$graph = new PieGraph(350,200,"auto"); 
$graph->SetShadow(); 

// Set A title for the plot 
$graph->title->Set("Tipos de Tecnicos"); 
$graph->title->SetColor("darkblue"); 


// Create pie plot 
$p1 = new PiePlot3d($datax); 
$p1->SetTheme("sand"); 
$p1->SetCenter(0.4); 
$graph->Add($p1); 
$graph->Stroke(); 


?>
mira es una tabla que contiene tres columnas nombre, observacion, y tipo (T y C) la observacion contiene la descricripcion de cada nombre ke solo son tres tipos por ejemplo A,B, C , lo que deseo graficar es hay tantos nombres de observacion A B C y me grafique los porcentajes de cada observacion.

creo que yo solo cometo el error en la consulta sql

bueno cluster espero que me entiendas y me puedas ayudar
__________________
Practicando se Aprede
:-) :-)

Última edición por necu; 23/07/2004 a las 11:40
  #4 (permalink)  
Antiguo 23/07/2004, 12:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Tendras que hacer una consulta tipo COUNT() para contar esos registros que ya agrupas:

Código PHP:
$result mysql_db_query("$base_de_datos","select COUNT(*) as subtotales from $tabla  GROUP BY observa"); 
while(
$row mysql_fetch_array($result)){ 
$datax[]=$row['subtotales'];

El objetivo es crear ese array de "sub-totales" para pasarselo a tu método de esa classe.

Un saludo,
  #5 (permalink)  
Antiguo 24/07/2004, 20:00
 
Fecha de Ingreso: abril-2003
Ubicación: 127.0.0.1
Mensajes: 359
Antigüedad: 21 años
Puntos: 0
Sonrisa

gracias cluster por tu ayuda, me funciono bien solo ahora nose como hacerlo para que en la leyenda me muestre los nombres de los tres tipos que existen en la base de datos:

el codigo quedo asi ahora:

Código PHP:
<?php 

include ("../funcion/conexion.php");
mysql_connect($host,$usuarioBD,$contaseñaBD);

$result mysql_db_query("$base_de_datos","select count(*) as sub from $tabla  GROUP BY observa");

while(
$row mysql_fetch_array($result)){ 


      
    
$datax[] = $row[sub]; 
     
             
$datay[] = ????????;
}


include (
"src/jpgraph.php");
include (
"src/jpgraph_pie.php");
include (
"src/jpgraph_pie3d.php");


// Some data 
//$data = array(20,27,45,75,90); 

// Create the Pie Graph. 
$graph = new PieGraph(350,200,"auto"); 
$graph->SetShadow(); 

// Set A title for the plot 
$graph->title->Set("Grafico"); 
$graph->title->SetColor("darkblue"); 


// Create pie plot 
$p1 = new PiePlot3d($datax); 
$p1->SetTheme("sand"); 
$p1->SetCenter(0.4);
$p1->SetLegends($datay);

$graph->Add($p1); 

$graph->Stroke(); 


?>
no se si te percataste ahora hay dos cambios en el codigo que son $datay[] = ????????; que significa lo ke tengo ke hacer para lo que pregunte anteriormente antes del codigo.

el otro cambio en el codigo es $p1->SetLegends($datay); es para mostrar la leyenda de cada uno de los colores.

aqui te muestro la imagen del grafico ya generado con el codigo anterior ya generado

__________________
Practicando se Aprede
:-) :-)
  #6 (permalink)  
Antiguo 25/07/2004, 10:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Necu .. deberías ver algún manual de SQL y estudiar el tema bien .. por qué los problemas que tienes no son jpgrah o esta classe en concreto sino de que datos debes extraer de tu BD para atender a los requerimientos de esta classe. (hazme caso .. te irá mejor en el futuro .. como veras no todo es "PHP" .. si trabajas con BD debes saber si o si cuanto más mejor de su própio lenguaje: SQL y sus técnicas).

-----

Resolviendo tu pregunta ..

Fijate que resultados obtienes cuando agrupas (GROUP BY) .. ahí verás que si bien aplicamos una función concreta "contar" (COUNT()) esos resultados .. también queremos obtener un nombre de un campo de esos que hemos agrupado...

Código PHP:
$result mysql_db_query("$base_de_datos","select count(*) as sub,nombre_campo_para_leyenda from $tabla  GROUP BY observa"); 

while(
$row mysql_fetch_array($result)){ 
       
    
$datax[] = $row['sub']; 
    
$datay[] = $row['nombre_campo_para_leyenda']; 
     

Un saludo,

PD: Nunca he usado esta classe jpgraph.

Última edición por Cluster; 25/07/2004 a las 10:25
  #7 (permalink)  
Antiguo 23/10/2006, 10:05
 
Fecha de Ingreso: octubre-2006
Mensajes: 1
Antigüedad: 17 años, 6 meses
Puntos: 0
Problemas con jpgraph???

Buenas Amigos, estoy tratando de hacer graficos en php, ya tengo la idea de que es por jpgraph pero el problema consiste en que necesito traerme unos datos de una base de datos hecha en SQL y mostrarlos en un grafico de tarta por favor ayudenme en lo posible.

HELP ME PLEASE.
  #8 (permalink)  
Antiguo 24/10/2006, 15:26
 
Fecha de Ingreso: abril-2003
Ubicación: 127.0.0.1
Mensajes: 359
Antigüedad: 21 años
Puntos: 0
Sonrisa

Hola Olaforhc
Espero que este ejemplo te sirva, yo trabajo asi de esa forma y mi torta sale a la perfección
Cualquier duda posteala y te ayudare, espero tu respuesta.

Código:
Lo importante guarda el archivo con el mismo nombre como lo declaras al final $graph->StrokeCSIM('torta.php'); 
Código PHP:
<?php
//include de archivos de jpgraph
include ("librerias/jpgraph.php");
include (
"librerias/jpgraph_pie.php");
include (
"librerias/jpgraph_pie3d.php");

//consultas para obtener valores    
    
$consulta0=mysql_query("select * from tabla'");
    
$tota0 =mysql_num_rows($consulta0);     
//-------------------------------------------------------------------------
    
$consulta1=mysql_query("select * from tabla'");
    
$total1 =mysql_num_rows($consulta1); 
//-------------------------------------------------------------------------    
    
$consulta2=mysql_query("select * from tabla'");
    
$total2 =mysql_num_rows($consulta2); 
//-------------------------------------------------------------------------    
    
$consulta3=mysql_query("select * from tabla'");
    
$total3 =mysql_num_rows($consulta3); 

}
// array final
$data= array($total0,$total1,$total2,$total3);

//leyendas de los pedasos de torta
$leg= array("Leyenda 1\n%.1f%%","Leyenda 1.1\n%.1f%%","   Leyenda 1.2\n   %.1f%%","Leyenda 1.3\n%.1f%%"); 
$leg2=array("Leyenda 2");
$leg3= array("Leyenda 1 -> ($tota0)","Leyenda 1.1  -> ($total)","Leyenda 1.2 -> ($tota2)","Leyenda 1.3 -> ($total3)");

        
        
$graph = new PieGraph(470,258,"auto"); 
        
$graph->SetShadow(); 
        
$graph->title->Set($titulo); 
        
$graph->title->SetFont(FF_ARIAL,FS_BOLD,11); 
        
$graph->title->SetColor("red");
        
$graph->title->SetMargin(5);
        
$graph->SetFrame(false);
            
        
//foto.jpg corresponde a un fondo persalizado que coloco en mis graficos
        
$graph->SetBackgroundImage('fondo.jpg',BGIMG_FILLFRAME);
        
        
$p1 = new PiePlot3D($data); 
        
$p1->SetSize(.3); 
        
$p1->SetCenter(0.50); 
        
$p1->SetStartAngle(10); 
        
$p1->SetAngle(70); 
        
        
$p1->SetLabels($leg); 
        
$p1->SetCSIMTargets($leg2,$leg3); 
        
$p1->value->SetColor("darkblue"); 
        
$p1->value->SetFont(FF_FONT1,FS_BOLD); 
        
$p1->SetLabelType(PIE_VALUE_PER); 
        
$a array_search(max($data),$data);
        
$p1->ExplodeSlice($a); 
        
        
$graph->Add($p1); 
        
$graph->StrokeCSIM('torta.php');

    
?>
__________________
Practicando se Aprede
:-) :-)

Última edición por necu; 24/10/2006 a las 15:28 Razón: Espero que te ayude este codigito
  #9 (permalink)  
Antiguo 30/05/2007, 10:45
 
Fecha de Ingreso: enero-2007
Mensajes: 4
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Problemas con jpgraph??

Buen Dia soy nuevo en el foro...

Tengo un problema... tengo un error al pintar con jpgraph cuando hay mas de 24 datos en el eje X xaxis... no se si es un limite predefinido en las librerias de jpgraph...

En Yaxis tengo problemas cuando hay mas de 3000 datos.. no si si es problema de memoria... alguna caracteristica de PHP, apache o se deba modificar alguna funcion de jpgraph...

La funcion que utilizo es la siguiente:

if($tipo_grafico=="BARRAS_1")
{
//################################################## ###############3
// CREA EL OBJETO GRAFICO
$graph = new Graph($ancho,$alto);
$graph->SetScale("textlin");
$graph->SetBackgroundGradient('#FFFFFF','#CDDEFF:0.8',GRA D_HOR,BGRAD_PLOT);
$graph->SetBackgroundImage("../img/logobg.jpg",BGIMG_CENTER);
$graph->SetFrame(false);
$graph->title->Set($TITULO);
$graph->title->SetFont(FF_ARIAL,FS_BOLD,$tam_letra+2);
$graph->title->SetMargin(10);
//iz der arri abajo
$graph->SetMargin($mg_izq,$mg_der,$mg_arr,$mg_abajo);
$graph->AdjBackgroundImage(0.7,0.3);

// CREA EL OBJETO DE LAS BARRAS GRAFICAS
$bar1 = new BarPlot($datos_eje_Y);
// CONFIGURACION DATOS X
$graph->xgrid->SetColor('[email protected]');
$graph->xaxis->SetTickLabels($datos_eje_X);
/*$graph->xaxis->title->Set($LEYENDA_X);
$graph->xaxis->HideZeroLabel();*/
$txt1 = new Text($PARAMETROS);
$txt1->SetPos(50,50);
$txt1->SetFont(FF_ARIAL,FS_NORMAL,9);
$txt1->SetAngle(0);
$graph->Add($txt1);

$txt = new Text($LEYENDA_X);
$txt->SetPos($ancho/2,$alto-5,'center','bottom');
$txt->SetFont(FF_ARIAL,FS_BOLD,$tam_letra);
$txt->SetAngle(0);
$graph->Add($txt);

if($giro){$graph->xaxis->SetLabelAngle($giro);}
$graph->SetMarginColor('white');
$graph->xgrid->Show();

// CONFIGURACION DATOS Y
$graph->yaxis->title->Set($LEYENDA_Y);
$graph->yaxis->title->SetMargin(10);
$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,$tam_letra);
$graph->yaxis->scale->SetGrace(2);
$graph->yaxis->HideZeroLabel();


$graph->ygrid->SetFill(true,'#[email protected]','#[email protected]');
$graph->ygrid->SetColor('[email protected]');
$graph->ygrid->Show();

// CONFIGURACION DE LAS BARRAS
$bar1->SetLegend($ellabel);
$bar1->SetColor("#4D4DFF");
$bar1->value->SetFormat('%d');
$bar1->value->Show();
$bar1->SetShadow();
$bar1->SetFillColor('orange');

//CONFIGURA LA SALIDA GENERADA POR EL DIBUJO
$graph->Add($bar1);
if($num_grafica){$num_grafica .=$usuario_id;$graph->Stroke("/tmp/GRAFICA$num_grafica.png");}$graph->Stroke();
}

PD: Manejo la creacion de graficos pero no comprendo porque sale error o simplemente no dibuja nada cuando en el eje X envio mas de 24 datos...

agradezco la ayuda... si necesitan algo se pueden comunicar a karlosandrez arrboa gmail punto com...
  #10 (permalink)  
Antiguo 04/06/2007, 11:21
 
Fecha de Ingreso: mayo-2007
Mensajes: 8
Antigüedad: 16 años, 11 meses
Puntos: 0
Pregunta Re: Problemas con jpgraph??

Hey amigos:

Yo tengo un problema similar....
Yo recogo los datos que quiero graficar por medio de un formulario en HTML, este envía los datos por medio de la selección que hago desde un ListBox, esto no es problema, se envían los datos correctos para hacer la consulta.
El código en php que generará la gráfica es el siguiente:

<?php
if ($c=OCILogon("usuario", "contraseña", "baseOracle")) {
} else {
$err = OCIError();
}
// Select Data...
//$dato = $_POST['miDato_Name'];
if(isset($_POST['miDato'])){
$dato = $_POST['miDato'];
}
//$dato = $_POST['$miDato->TextColumn'];
//$dato = 77;
//for ($i=0;$i<count($dato);$i++)
//{
//$query = "select a.valor_indicador from sise_indicadores_sum a where //a.codigo_indicador='$dato[$i]' order by a.anio";
//}
$query = "select a.valor_indicador from sise_indicadores_sum a where a.codigo_indicador='$dato' order by a.anio";
//print "<pre>";
//var_dump($query);
//print "</pre>";

$s = OCIParse($c, $query);
//$s = OCIParse($c, "select a.valor_indicador from sise_indicadores_sum a where a.codigo_indicador='$dato' order by a.anio");
OCIExecute($s);
$data = array(); // creamos un arreglo en blanco, este será el de los datos

while ($row = oci_fetch_array($s, OCI_RETURN_NULLS)) {
$data[] = $row[0]; // agregamos el dato, suponiendo que este en la primera posición del arreglo resultante
}

//Seleccion de otros datos...
//for ($j=0;$j<count($dato);$j++)
//{
//$query2 = "select a.anio from sise_indicadores_sum a where a.codigo_indicador='$dato[$j]' order by a.anio";
//}
$query2 = "select a.anio from sise_indicadores_sum a where a.codigo_indicador='$dato' order by a.anio";
$s2 = OCIParse($c, $query2);
//$s2 = OCIParse($c, "select a.anio from sise_indicadores_sum a where a.codigo_indicador='$dato' order by a.anio");
OCIExecute($s2);
$data2 = array();
while ($row2 = oci_fetch_array($s2, OCI_RETURN_NULLS)) {
$data2[] = $row2[0];
}

//Seleccion de otros datos...
//for ($k=0;$k<count($dato);$k++)
//{
//$query3 = "select a.nombre_indicador from sise_indicadores a where a.codigo_indicador='$dato[$k]'";
//}
$query3 = "select a.nombre_indicador from sise_indicadores a where a.codigo_indicador='$dato'";
$s3 = OCIParse($c, $query3);
//$s3 = OCIParse($c, "select a.nombre_indicador from sise_indicadores a where a.codigo_indicador='$dato'");
OCIExecute($s3);
$data3 = array();
while ($row3 = oci_fetch_array($s3, OCI_RETURN_NULLS)) {
$nom[] = $row3[0];
}




//librerias para graficar
include_once ("C:/wamp/jpgraph-1.21b/src/jpgraph.php");
include_once ("C:/wamp/jpgraph-1.21b/src/jpgraph_pie.php");
include_once ("C:/wamp/jpgraph-1.21b/src/jpgraph_pie3d.php");

$datay = $data;
$datay2 = $data2;
$nombre = $nom;


// Create the Pie Graph.
$graph = new PieGraph(700,300);//,'auto');
$graph->SetShadow();

// Set A title for the plot
//$graph->title->Set("Código de Area y Nombre de Area");
$graph->title->Set($nombre[0]);
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create
//print "<pre>";var_dump($datay);
//exit;
$p1 = new PiePlot3D($datay);
$p1->SetLegends($datay2);
$p1->SetTheme("pastel");

// Use absolute labels
$p1->SetLabelType(1);
$p1->value->SetFormat("valor: %d");

// Move the pie slightly to the left
$p1->SetCenter(0.4,0.5);


$graph->Add($p1);


// Send back the HTML page which will call this script again
// to retrieve the image.
$graph->StrokeCSIM('pruebaOracle_graf.php');

?>

Como verán el código en php está bueno, pero cuando en la página html le envío los datos por medio del formulario y cargo la página php que grafica, el JpGraph me envía un error:

Illegal pie plot. Sum of all dato is zero

verifico los datos usando print "<pre>";var_dump($datay);
exit; y los datos que deseo graficar si existen, entonces ¿por qué me da este error el JpGraph?
¿Cómo puedo solucionarlo?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 00:47.