duda al graficar desde jgraph

233 views
Skip to first unread message

Andrés Oporto

unread,
Jul 7, 2015, 6:13:22 PM7/7/15
to php...@googlegroups.com
hola tengo la siguiete codificación:

<?php // content="text/plain; charset=utf-8"

require_once
('./jpgraph/src/jpgraph.php');
require_once
('./jpgraph/src/jpgraph_line.php');
require_once
('./jpgraph/src/jpgraph_error.php');
 
$x_axis
= array();
$y_axis
= array();
$i
= 0;
 
$con
=mysqli_connect("localhost","root","","seguridadlandia");
// Check connection
if (mysqli_connect_errno()) {
  echo
"Failed to connect to MySQL: " . mysqli_connect_error();
}
 
$result
= mysqli_query($con,"select u.id, z.nombre from usuario u join cliente_hogar ch on  u.id = ch.id_cliente join hogar h on ch.id_hogar = h.id join zona z on  h.id = z.id");
 
 
while($row = mysqli_fetch_array($result)) {
$x_axis
[$i] =  $row["id"];
$y_axis
[$i] = $row["nombre"];
    $i
++;
 
}
     
         
    mysqli_close
($con);
 
 
$graph
= new Graph(800,500);
$graph
->img->SetMargin(40,40,40,40);
$graph
->img->SetAntiAliasing();
$graph
->SetScale("textlin");
$graph
->SetShadow();
$graph
->title->Set("Example of line centered plot");
$graph
->title->SetFont(FF_FONT1,FS_BOLD);
 
 
// Use 20% "grace" to get slightly larger scale then min/max of
// data
$graph
->yscale->SetGrace(0);
 
 
$p1
= new LinePlot($y_axis);
$p1
->mark->SetType(MARK_FILLEDCIRCLE);
$p1
->mark->SetFillColor("red");
$p1
->mark->SetWidth(4);
$p1
->SetColor("blue");
$p1
->SetCenter();
$graph
->Add($p1);
 
$graph
->Stroke();

?>
 pero cuando lo ejecuto me muestra el siguiente mensaje: "JpGraph error 25044: cannot use auto scaling since it is impossible to determine a valid min/max value of the Y axis (only null values), pero la consulta haciendo en mysql me devuelve:
id nombre
2 san justo
2 villa luzuriaga

a que se debe el error?

Tordek

unread,
Jul 7, 2015, 8:33:06 PM7/7/15
to php...@googlegroups.com
Cuando lo ejecutás te da un mensaje bastante claro: "No se puede usar
escalado automático porque no hay un máximo/mínimo válido para el eje
Y (todos los valores son NULL)".

Estás queriendo graficar algo sin sentido (y que me da miedo, si tenés
2 filas con el mismo ID): Le decís que los valores a graficar son una
lista de nombres. ¿Qué estás tratando de hacer?
> --
> Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP
> Argentina" de Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a php-arg+u...@googlegroups.com.
> Para publicar en este grupo, envía un correo electrónico a
> php...@googlegroups.com.
> Visita este grupo en http://groups.google.com/group/php-arg.
> Para acceder a más opciones, visita https://groups.google.com/d/optout.

Andrés Oporto

unread,
Jul 7, 2015, 10:07:14 PM7/7/15
to php...@googlegroups.com
Estoy tratando de graficar cliente que adquieren el servicio por zona, sabes como usra los alias en los parámetros de los ejes x e y ? me toma si son de la misma tabla, pero no si son de tablas diferentes

Tordek

unread,
Jul 7, 2015, 11:21:35 PM7/7/15
to php...@googlegroups.com
No, nunca usé JpGraph, pero tenés varios errores, de concepto y demás...

La query que estás haciendo no te cuenta "usuarios por zona", que
entiendo que es lo que querés hacer... para eso necesitás algo como

SELECT z.nombre, count(u.id) as usuarios
FROM Zona z
JOIN hogar h on h.id = z.id -- h.id es el id de zona? no debería ser h.id_zona?
JOIN cliente_hogar ch on ch.id_hogar = hogar.id
JOIN usuario u on ch.id_cliente = u.id
GROUP BY z.nombre

Un gráfico "de líneas" no es el adecuado para lo que querés expresar:
el órden de la zonas no tiene significado (¿o sí? y si es así, ¿cual
es el orden?); querés un gráfico de barras, donde cada barra indica la
cantidad de usuarios en esa zona.

Una vez que hiciste la query, tenés que generar 2 arrays: uno contiene
los nombres de las zonas, y el otro la cantidad de usuarios:

while($row = mysqli_fetch_array($result)) {
$zonas[] = $row["nombre"];
$datos[] = $row["id"];
}

Notá que uso $zonas[] para agregar elementos al final del array; no
hace falta lo de "$zonas[$i] ... $i+1".

Y el gráfico lo tenés que armar con...

$graph->yaxis->SetTickLabels($zonas);

...

$plot = new BarPlot($datos);

...
Reply all
Reply to author
Forward
0 new messages