Foros del Web » Programando para Internet » PHP »

Colocar un nuevo array en barplot en JpGraph

Estas en el tema de Colocar un nuevo array en barplot en JpGraph en el foro de PHP en Foros del Web. Hola estoy haciendo un grafico donde muestro la cantidad de pagos por mes , pero ahora necesito agregarle el monto a cada barra , eso ...
  #1 (permalink)  
Antiguo 23/11/2015, 13:34
 
Fecha de Ingreso: noviembre-2014
Mensajes: 46
Antigüedad: 9 años, 5 meses
Puntos: 0
Colocar un nuevo array en barplot en JpGraph

Hola estoy haciendo un grafico donde muestro la cantidad de pagos por mes , pero ahora necesito agregarle el monto a cada barra , eso lo estoy intentando con un nuevo array llamado $montos pero por ma que lo intente no funciona y no se me ocurre otra forma de hacerlo.

La linea donde intento insertar el array es aca :

Código:
    $barplot1->value->SetFormat($montos);
El codigo :

Código:
    function consultarDeudoresMesGrafico($year)
    {
        
        $consulta = "";
        
        if ($year == "") {
            $consulta = mysql_query("select id_deudor,month(fecha_pago_deudor) from deudores");
        } else {
            $consulta = mysql_query("select id_deudor,month(fecha_pago_deudor) from deudores where year(fecha_pago_deudor)='" . $year . "'");
        }
        
        $monto_total = "0";
        
        if ($year == "") {
            $monto_total = totalDeudores();
        } else {
            $monto_total = totalDeudorPorYear($year);
        }
        
        if (!is_numeric($monto_total)) {
            $monto_total = "0";
        }
		
		$montos = array("300","400","600","800","900","200","300","100","400","600","800","900");
        
        $cantidad = mysql_num_rows($consulta);
        
        $ids = array();
        
        $Enero      = 0;
        $Febrero    = 0;
        $Marzo      = 0;
        $Abril      = 0;
        $Mayo       = 0;
        $Junio      = 0;
        $Julio      = 0;
        $Agosto     = 0;
        $Septiembre = 0;
        $Octubre    = 0;
        $Noviembre  = 0;
        $Diciembre  = 0;
        
        while ($resultado = mysql_fetch_array($consulta)) {
            
            $id_cliente = $resultado[0];
            $mes_pago   = $resultado[1];
            
            if (!in_array($id_cliente, $ids)) {
                array_push($ids, $id_cliente);
                if ($mes_pago == 1) {
                    $Enero++;
                }
                if ($mes_pago == 2) {
                    $Febrero++;
                }
                if ($mes_pago == 3) {
                    $Marzo++;
                }
                if ($mes_pago == 4) {
                    $Abril++;
                }
                if ($mes_pago == 5) {
                    $Mayo++;
                }
                if ($mes_pago == 6) {
                    $Junio++;
                }
                if ($mes_pago == 7) {
                    $Julio++;
                }
                if ($mes_pago == 8) {
                    $Agosto++;
                }
                if ($mes_pago == 9) {
                    $Septiembre++;
                }
                if ($mes_pago == 10) {
                    $Octubre++;
                }
                if ($mes_pago == 11) {
                    $Noviembre++;
                }
                if ($mes_pago == 12) {
                    $Diciembre++;
                }
            }
            
        }
        
        $textos = array(
            "Enero",
            "Febrero",
            "Marzo",
            "Abril",
            "Mayo",
            "Junio",
            "Julio",
            "Agosto",
            "Septiembre",
            "Octubre",
            "Noviembre",
            "Diciembre"
        );
        $datos  = array(
            $Enero,
            $Febrero,
            $Marzo,
            $Abril,
            $Mayo,
            $Junio,
            $Julio,
            $Agosto,
            $Septiembre,
            $Octubre,
            $Noviembre,
            $Diciembre
        );
        
        $grafico = new Graph(500, 400, 'auto');
        $grafico->SetScale("textlin");
        
        $theme = new UniversalTheme;
        $grafico->SetTheme($theme);
        $grafico->title->Set("Cantidad de deudores por mes");
        
        $grafico->Set90AndMargin(80, 40, 60, 40);
        $grafico->img->SetAngle(90);
        
        $grafico->yaxis->scale->SetGrace(20);

        $grafico->xaxis->title->Set("");
        $grafico->yaxis->title->Set(""); 			
    	$grafico->title->SetFont(FF_FONT1,FS_BOLD);
        $grafico->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
        $grafico->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
        $grafico->xaxis->SetTickLabels($textos);
        
        $grafico->footer->center->Set('Monto total : $' . $monto_total);

        $barplot1 = new BarPlot($datos);
        
        $grafico->Add($barplot1);
        			
        $barplot1->SetWeight(0);
        $barplot1->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR);
        $barplot1->SetWidth(17);
		
		$barplot1->value->SetFormat($montos);
		$barplot1->value->Show();
		$barplot1->value->HideZero(true);
		$barplot1->value->SetFont(FF_FONT1,FS_BOLD);
		$barplot1->SetValuePos('center');
        
		
        $grafico->Stroke();
        
    }
Una imagen :



¿ Como puedo insertar el array $montos delante de cada barra ? ¿ Alguien se le ocurre otra forma ?
  #2 (permalink)  
Antiguo 23/11/2015, 22:26
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Colocar un nuevo array en barplot en JpGraph

Saludo.
Pues al ser un array, se tiene que usar la posición de cada elemento,
por ej $montos[$i] dando a $i un valor entre 0 y 11, así que lo mejor sería recorrer este array
o incluso usar la variable de $mes_pago - 1 en la posición a mostrar en $montos.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 24/11/2015, 12:05
 
Fecha de Ingreso: noviembre-2014
Mensajes: 46
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Colocar un nuevo array en barplot en JpGraph

gracias por responder , el problema es que en la documentacion y en los ejemplos de la pagina del modulo no aclaran y me parece que no se puede hacer cada barra en un for , simplemente se ponen los datos en formato array y se acomoda todo solo.

Saludos.

Última edición por JimmyBrain; 24/11/2015 a las 12:28
  #4 (permalink)  
Antiguo 24/11/2015, 22:27
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Colocar un nuevo array en barplot en JpGraph

Saludo.
Pues tal vez haciendo uso de AccBarPlot se pueda solucionar el asunto.
Ya no se agregaría el barplot al gráfico, sino que se agregaría barplot
al accbarplot, y este al gráfico.

Ejemplos de ello hay en la documentación en la parte de tablas,
adaptado al código actual sería algo así.

Código PHP:
Ver original
  1. $barplot1 = new BarPlot($montos);
  2. $barplot1->SetWeight(0);
  3. $barplot1->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR);
  4. $barplot1->SetWidth(17);
  5. $barplot1->value->SetFormat($montos);
  6. $barplot1->value->Show();
  7. $barplot1->value->HideZero(true);
  8. $barplot1->value->SetFont(FF_FONT1,FS_BOLD);
  9. $barplot1->SetValuePos('center');
  10.  
  11. $accbplot = new AccBarPlot(array($barplot1));
  12. $accbplot->value->Show();
  13. $grafico->Add($accbplot);
  14. $grafico->Stroke();

Y el resultado sería este
grafica.png

__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 25/11/2015 a las 01:58
  #5 (permalink)  
Antiguo 29/11/2015, 12:30
 
Fecha de Ingreso: noviembre-2014
Mensajes: 46
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Colocar un nuevo array en barplot en JpGraph

gracias por la ayuda morti , el codigo queda asi :

Código:
        function consultarDeudoresMesGrafico($year)
        {
            
            $consulta = "";
            
            if ($year == "") {
                $consulta = mysql_query("select id_deudor,month(fecha_pago_deudor) from deudores");
            } else {
                $consulta = mysql_query("select id_deudor,month(fecha_pago_deudor) from deudores where year(fecha_pago_deudor)='" . $year . "'");
            }
            
            $monto_total = "0";
            
            if ($year == "") {
                $monto_total = totalDeudores();
            } else {
                $monto_total = totalDeudorPorYear($year);
            }
            
            if (!is_numeric($monto_total)) {
                $monto_total = "0";
            }
			
	        $montos = array("300","400","600","800","900","200","300","100","400","600","800","900");
            
            $cantidad = mysql_num_rows($consulta);
            
            $ids = array();
            
            $Enero      = 0;
            $Febrero    = 0;
            $Marzo      = 0;
            $Abril      = 0;
            $Mayo       = 0;
            $Junio      = 0;
            $Julio      = 0;
            $Agosto     = 0;
            $Septiembre = 0;
            $Octubre    = 0;
            $Noviembre  = 0;
            $Diciembre  = 0;
            
            while ($resultado = mysql_fetch_array($consulta)) {
                
                $id_cliente = $resultado[0];
                $mes_pago   = $resultado[1];
                
                if (!in_array($id_cliente, $ids)) {
                    array_push($ids, $id_cliente);
                    if ($mes_pago == 1) {
                        $Enero++;
                    }
                    if ($mes_pago == 2) {
                        $Febrero++;
                    }
                    if ($mes_pago == 3) {
                        $Marzo++;
                    }
                    if ($mes_pago == 4) {
                        $Abril++;
                    }
                    if ($mes_pago == 5) {
                        $Mayo++;
                    }
                    if ($mes_pago == 6) {
                        $Junio++;
                    }
                    if ($mes_pago == 7) {
                        $Julio++;
                    }
                    if ($mes_pago == 8) {
                        $Agosto++;
                    }
                    if ($mes_pago == 9) {
                        $Septiembre++;
                    }
                    if ($mes_pago == 10) {
                        $Octubre++;
                    }
                    if ($mes_pago == 11) {
                        $Noviembre++;
                    }
                    if ($mes_pago == 12) {
                        $Diciembre++;
                    }
                }
                
            }
            
            $textos = array(
                "Enero",
                "Febrero",
                "Marzo",
                "Abril",
                "Mayo",
                "Junio",
                "Julio",
                "Agosto",
                "Septiembre",
                "Octubre",
                "Noviembre",
                "Diciembre"
            );
            $datos  = array(
                $Enero,
                $Febrero,
                $Marzo,
                $Abril,
                $Mayo,
                $Junio,
                $Julio,
                $Agosto,
                $Septiembre,
                $Octubre,
                $Noviembre,
                $Diciembre
            );
            
            $grafico = new Graph(500, 400, 'auto');
            $grafico->SetScale("textlin");
            
            $theme = new UniversalTheme;
            $grafico->SetTheme($theme);
            $grafico->title->Set("Cantidad de deudores por mes");
            
            $grafico->Set90AndMargin(80, 40, 60, 40);
            $grafico->img->SetAngle(90);
            
	        $grafico->yaxis->scale->SetGrace(20);

            $grafico->xaxis->title->Set("");
            $grafico->yaxis->title->Set(""); 			
	    	$grafico->title->SetFont(FF_FONT1,FS_BOLD);
	        $grafico->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
	        $grafico->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
	        $grafico->xaxis->SetTickLabels($textos);
            
            $grafico->footer->center->Set('Monto total : $' . $monto_total);
			
			$barplots = array();
			
			for($i=0; $i<count($datos); $i++){
				$barplots[$i] = new BarPlot($datos[$i]);
				$barplots[$i]->value->SetFormat($montos[$i]);
				$barplots[$i]->value->Show();
				$barplots[$i]->value->HideZero(true);
				$barplots[$i]->value->SetFont(FF_FONT1,FS_BOLD);
				$barplots[$i]->SetValuePos('center');
			}
			
			//$gbarplot = new GroupBarPlot($barplots);
			$gbarplot = new AccBarPlot($barplots);

            $grafico->Add($gbarplot);
			
            $grafico->Stroke();
            
        }
El problema es que cuando quiero meter todos los barploits en el GroupBarPlot se ve todo asi :



No aparecen todos los meses y ningun dato.

Y cuando quiero usar AccBarPlot me devuelve simplemente este error :



El efecto que quiero lograr es como la primera imagen del primer post pero con un setFormat basado en otro array llamado $montos sin perder los nombres de los meses y sin perder las cantidades de pagos de cada barra.

¿ Como puedo solucionar este problema ?
  #6 (permalink)  
Antiguo 30/11/2015, 11:35
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Colocar un nuevo array en barplot en JpGraph

Saludo.
Pues veo que se hizo un array para los barplots,
pero en el caso que dejé de ejemplo yo envío el array de los montos directo.
¿ya probaste de ese modo?
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 30/11/2015, 12:42
 
Fecha de Ingreso: noviembre-2014
Mensajes: 46
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Colocar un nuevo array en barplot en JpGraph

hola morti , gracias por seguir ayudandome , el tema es que tu codigo queda asi :
Código PHP:
Ver original
  1. function consultarDeudoresMesGrafico($year)
  2.         {
  3.            
  4.             $consulta = "";
  5.            
  6.             if ($year == "") {
  7.                 $consulta = mysql_query("select id_deudor,month(fecha_pago_deudor) from deudores");
  8.             } else {
  9.                 $consulta = mysql_query("select id_deudor,month(fecha_pago_deudor) from deudores where year(fecha_pago_deudor)='" . $year . "'");
  10.             }
  11.            
  12.             $monto_total = "0";
  13.            
  14.             if ($year == "") {
  15.                 $monto_total = totalDeudores();
  16.             } else {
  17.                 $monto_total = totalDeudorPorYear($year);
  18.             }
  19.            
  20.             if (!is_numeric($monto_total)) {
  21.                 $monto_total = "0";
  22.             }
  23.            
  24.             $montos = array("300","400","600","800","900","200","300","100","400","600","800","900");
  25.            
  26.             $cantidad = mysql_num_rows($consulta);
  27.            
  28.             $ids = array();
  29.            
  30.             $Enero      = 0;
  31.             $Febrero    = 0;
  32.             $Marzo      = 0;
  33.             $Abril      = 0;
  34.             $Mayo       = 0;
  35.             $Junio      = 0;
  36.             $Julio      = 0;
  37.             $Agosto     = 0;
  38.             $Septiembre = 0;
  39.             $Octubre    = 0;
  40.             $Noviembre  = 0;
  41.             $Diciembre  = 0;
  42.            
  43.             while ($resultado = mysql_fetch_array($consulta)) {
  44.                
  45.                 $id_cliente = $resultado[0];
  46.                 $mes_pago   = $resultado[1];
  47.                
  48.                 if (!in_array($id_cliente, $ids)) {
  49.                     array_push($ids, $id_cliente);
  50.                     if ($mes_pago == 1) {
  51.                         $Enero++;
  52.                     }
  53.                     if ($mes_pago == 2) {
  54.                         $Febrero++;
  55.                     }
  56.                     if ($mes_pago == 3) {
  57.                         $Marzo++;
  58.                     }
  59.                     if ($mes_pago == 4) {
  60.                         $Abril++;
  61.                     }
  62.                     if ($mes_pago == 5) {
  63.                         $Mayo++;
  64.                     }
  65.                     if ($mes_pago == 6) {
  66.                         $Junio++;
  67.                     }
  68.                     if ($mes_pago == 7) {
  69.                         $Julio++;
  70.                     }
  71.                     if ($mes_pago == 8) {
  72.                         $Agosto++;
  73.                     }
  74.                     if ($mes_pago == 9) {
  75.                         $Septiembre++;
  76.                     }
  77.                     if ($mes_pago == 10) {
  78.                         $Octubre++;
  79.                     }
  80.                     if ($mes_pago == 11) {
  81.                         $Noviembre++;
  82.                     }
  83.                     if ($mes_pago == 12) {
  84.                         $Diciembre++;
  85.                     }
  86.                 }
  87.                
  88.             }
  89.            
  90.             $textos = array(
  91.                 "Enero",
  92.                 "Febrero",
  93.                 "Marzo",
  94.                 "Abril",
  95.                 "Mayo",
  96.                 "Junio",
  97.                 "Julio",
  98.                 "Agosto",
  99.                 "Septiembre",
  100.                 "Octubre",
  101.                 "Noviembre",
  102.                 "Diciembre"
  103.             );
  104.             $datos  = array(
  105.                 $Enero,
  106.                 $Febrero,
  107.                 $Marzo,
  108.                 $Abril,
  109.                 $Mayo,
  110.                 $Junio,
  111.                 $Julio,
  112.                 $Agosto,
  113.                 $Septiembre,
  114.                 $Octubre,
  115.                 $Noviembre,
  116.                 $Diciembre
  117.             );
  118.            
  119.             $grafico = new Graph(500, 400, 'auto');
  120.             $grafico->SetScale("textlin");
  121.            
  122.             $theme = new UniversalTheme;
  123.             $grafico->SetTheme($theme);
  124.             $grafico->title->Set("Cantidad de deudores por mes");
  125.            
  126.             $grafico->Set90AndMargin(80, 40, 60, 40);
  127.             $grafico->img->SetAngle(90);
  128.            
  129.             $grafico->yaxis->scale->SetGrace(20);
  130.  
  131.             $grafico->xaxis->title->Set("");
  132.             $grafico->yaxis->title->Set("");           
  133.             $grafico->title->SetFont(FF_FONT1,FS_BOLD);
  134.             $grafico->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
  135.             $grafico->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
  136.             $grafico->xaxis->SetTickLabels($textos);
  137.            
  138.             $grafico->footer->center->Set('Monto total : $' . $monto_total);
  139.  
  140.     $barplot1 = new BarPlot($datos);
  141.     $barplot1->SetWeight(0);
  142.     $barplot1->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR);
  143.     $barplot1->SetWidth(17);
  144.     $barplot1->value->SetFormat($montos);
  145.     $barplot1->value->Show();
  146.     $barplot1->value->HideZero(true);
  147.     $barplot1->value->SetFont(FF_FONT1,FS_BOLD);
  148.     $barplot1->SetValuePos('center');
  149.      
  150.     $accbplot = new AccBarPlot(array($barplot1));
  151.     $accbplot->SetWeight(0);
  152.     $accbplot->SetFillGradient("#BE81F7", "#E3CEF6", GRAD_HOR);
  153.     $accbplot->SetWidth(17);
  154.     $accbplot->value->HideZero(true);
  155.     $accbplot->value->SetFont(FF_FONT1,FS_BOLD);
  156.     $accbplot->SetValuePos('center');
  157.     $accbplot->value->Show();
  158.     $grafico->Add($accbplot);
  159.     $grafico->Stroke();
  160.  
  161.         }

Y me devuelve todo como al principio :



La idea es que en vez de 3.0 u otros datos al costado de cada barra , tiene que ser los datos del array $montos , todo esto es sin dejar de usar el array $datos como valor principal que es los numeros que estan en la parte de arriba del grafico , ese es el gran problema que me pidieron en el trabajo de mi tesis y no me sale , otra cosa rara es que no puedo centrar el 3.0 cosa que antes si podia.

Saludos.
  #8 (permalink)  
Antiguo 01/12/2015, 14:56
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Colocar un nuevo array en barplot en JpGraph

Saludo.
Uhm, pues ante eso solo se me ocurre una de dos.
O agregar los montos como textos flotantes,
o hacer otro gràfico de los meses vs los montos,
y luego combinar ambos gráficos para que quede uno solo,
pero pues habrà que ver sí hay restricciones en cuanto a lo solicitado.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 01/12/2015, 16:17
 
Fecha de Ingreso: noviembre-2014
Mensajes: 46
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Colocar un nuevo array en barplot en JpGraph

Y si , el modulo no permite esto , sabia que iba a terminar haciendo un segundo grafico
  #10 (permalink)  
Antiguo 02/12/2015, 01:42
 
Fecha de Ingreso: diciembre-2015
Mensajes: 8
Antigüedad: 8 años, 4 meses
Puntos: 1
Respuesta: Colocar un nuevo array en barplot en JpGraph

Hola JimmyBrain

Cita:
Iniciado por JimmyBrain Ver Mensaje
Y si , el modulo no permite esto , sabia que iba a terminar haciendo un segundo grafico
Porque no lo intentas con los graficos de google chart? todos se trabajan con matrices y es mas sencillo meter los arrays con un for

yo tambien batalle con esa libreria asi que opte por usar google chart y me ha ido de maravilla

si te interesa puedo pasarte un ejemplo de mis codigos
  #11 (permalink)  
Antiguo 02/12/2015, 09:28
 
Fecha de Ingreso: noviembre-2014
Mensajes: 46
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Colocar un nuevo array en barplot en JpGraph

@VanneVanesa : ok , gracias , si queres mostrarme los codigos para ver si traduzco este grafico a google chart.

Saludos.
  #12 (permalink)  
Antiguo 19/12/2015, 09:03
 
Fecha de Ingreso: noviembre-2014
Mensajes: 46
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Colocar un nuevo array en barplot en JpGraph

Ok , VanneVanesa no me responde , ¿ alguien conoce algun componente en PHP de graficos gratis que pueda hacer esto ?

Etiquetas: fecha, jpgraph, mysql, select
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:49.