En este grupo En todos

Foro de PHP



Colores con LibChart

Richard
Perú, Perú
Escrito por Richard Ramirez
el 04/10/2007

Buenas Joan.... A lo mejor me puedes ayudar... Estoy usando la libreria LibChart1. 2, pero no logro cambiar los colores a las barras... Quiero utilizar un juego de colores para un grafico y otro para otro grafico, dice que si se puede, pero no me sale.... Te copio una parte del codigo:

<? Php
 
 function imprimir_grafico( $datos ){

  $datos[1][1]=2005;
  $datos[1][2]=10;
  $datos[1][3]=20;
  $datos[1][4]=30;
  $datos[1][5]=40;
  
  $datos[2][1]=2006;
  $datos[2][2]=11;
  $datos[2][3]=21;
  $datos[2][4]=31;
  $datos[2][5]=41;
  
   include_once( "libreria/libchart-1. 2/libchart/classes/libchart. Php" );
           
  $chart = new VerticalBarChart(800,400);
  $columnas = count( $datos );
  
  $ind = ($columnas == 1)? 2:1);

  $serie1 = new XYDataSet();
  $serie1->addPoint(new Point("Hospit. ", $datos[$ind][2]));
  $serie1->addPoint(new Point("Cirugía", $datos[$ind][3]));
  $serie1->addPoint(new Point("Imageno. ", $datos[$ind][4]));
  $serie1->addPoint(new Point("Emergenc. ", $datos[$ind][5]));
  
  $serie2 = new XYDataSet();
  $serie2->addPoint(new Point("", $datos[2][2]));
  $serie2->addPoint(new Point("", $datos[2][3]));
  $serie2->addPoint(new Point("", $datos[2][4]));
  $serie2->addPoint(new Point("", $datos[2][5]));
  $dataSet = new XYSeriesDataSet();
  $dataSet->addSerie($datos[$ind][1], $serie1);
  $dataSet->addSerie($datos[2][1], $serie2);
  $colores = new ColorSet(array(new Color(1, 1, 1),new Color(14, 17, 36)));
  $colbarra = new Palette( $colores );
//  $colbarra->barColorSet = $colores;

  $chart->setDataSet($dataSet);
  $chart->getPlot()->setGraphCaptionRatio(0. 75);
  $chart->setTitle("Resumen de Morbilidad por Año");
//  $chart->getPlot()->getPalette( $colbarra );
  $chart->getPlot()->setLogoFileName("img/logo. Png");
  $chart->render( "img_generados/grafico1. Png" );
  
 }
 
? >
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1. 0 Transitional//EN" " https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional. Dtd ">
<html xmlns=" https://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>

<p>Grafico</p>
<p>
<? Php
 imprimir_grafico();
 $tiempo = md5(time());
 $nmbcuadro = "img_generados/grafico1. Png? Var=". $tiempo;
? >
 
  <img src="<? Echo $nmbcuadro;? >" style="border: 1px solid gray;"/>
 
</p>
</body>
</html>



Pero no sale....

Gracias por la ayuda que me puedas brindas....

Richard Ramirez
r_ramirez_g@yahoo. Com

Joan Cruz
Ingenieria en informática uab bellaterra
Escrito por Joan Cruz
el 05/10/2007

De todas maneras, parece que la llamada a imprimir_grafico(); que haces en la parte de la pàgina no es la misma que esta funcion espera, porque espera un parámetro imprimir_grafico($datos){}

Prueba a sacar el array datos de la función y pasarselo abajo.



    $datos_final[1][1]=2005;

  $datos_final[1][2]=10;
  $datos_final[1][3]=20;
  $datos_final[1][4]=30;
  $datos_final[1][5]=40;
  
  $datos_final[2][1]=2006;
  $datos_final[2][2]=11;
  $datos_final[2][3]=21;
  $datos_final[2][4]=31;
  $datos_final[2][5]=41;

Function imprimir_grafico( $datos ){ 
   include_once( "libreria/libchart-1. 2/libchart/classes/libchart. Php" );
  $chart = new VerticalBarChart(800,400);
  $columnas = count( $datos );
 .

.

.

}

I para la llamada

Imprimir_grafico($datos_final);

A ver si así te funciona.


Escrito por Calvin
el 14/11/2007

Hola revisa el archivo

Libchart/classes/view/color/palette. Php

Hay existen los vectores con los colores por defecto

Escrito por Alexis De La Cruz Toledo
el 26/12/2009

Alguno ha logrado resolverlo, la verdad esto me esta volviendo loco, por lo que veo hay poco documentacion, agradezco cualquier luz sobre el tema.

Lo que trato de realizar es una grafica de barras pero necesito que cada barra cambie de color, segun el tipo de datos, y luego me genere un caption donde describa el color de cada dato, por favor echenme la mano.

Escrito por Anibal Fernando Flores García
el 14/07/2010

Hola muchachos:

La solución es bastante sencilla, ingresa a la carpeta de la librería específicamente

.. /libchart/classes/view/chart/

y abres el archivo HorizontalBarChar. Php

luego, te diriges a la linea 163 aproximadamente

e insertas el siguiente código

$color=new Color(rand(0,255),rand(0,255),rand(0,255));
Seguidamente, cambias el último argumento de la siguiente línea de código

imagefilledrectangle($img, $graphArea->x1 + 1, $y1, $xmax, $y2, $shadowColor->getColor($img));

Te deberá quedar como se muestra a continuación:

imagefilledrectangle($img, $graphArea->x1 + 1, $y1, $xmax, $y2, $color);

Del mismo modo pueden modificar los otros tipos de grafico


Anibal
Moquegua-Peru

Escrito por Anibal Fernando Flores García
el 14/07/2010

Saludos muchachos

La solución a este problema es sencilla.

Debes ir a la siguiente carpeta

.. /libchart/classes/view/chart/

Y allí recuperar el archivo HorizontalBarChar. Php

Luego, te diriges a la línea 162 aproximadamente e insertas el siguiente código

$color=new Color(rand(0,255),rand(0,255),rand(0,255));

Esto te permitirá generar aleatoriamente colores para cada barra

Seguidamente, cambias el último argumento de la siguiente linea de código

Imagefilledrectangle($img, $graphArea->x1 + 1, $y1, $xmax, $y2, $shadowColor->getColor($img) );

Entonces esta línea quedará de la siguiente manera

Imagefilledrectangle($img, $graphArea->x1 + 1, $y1, $xmax, $y2, $color);

Y listo, ejecutas nuevamente el programa que genera el grafico y ya...

Moy Diaz B
Estado de México, Mé...
Escrito por Moy Diaz B
el 18/06/2012

Ya muy tarde pero siempre util otra opcion


En el archivo-> libchart\classes\model\ ChartConfig. Php

Buscamos esta funcion

Public function ChartConfig() {
$this->useMultipleColor = false;
$this->showPointCaption = true;
$this->sortDataPoint = true;
}

Normalmente esta la opcion $this->useMultipleColor en FALSE , solo hay que cambiarla a true.

Y en el archivo libchart\classes\view\color\ Palette. Php

Hay que modificar

// Set the colors for the bars
$this->setBarColor(array(
new Color(0, 79, 255),
new Color(255, 0, 0),
new Color(255, 255, 0),
new Color(90, 250, 255),
new Color(224, 198, 165),
new Color(239, 238, 218),
new Color(40, 72, 59),
new Color(71, 112, 132),
new Color(167, 192, 199),
new Color(218, 233, 202)
));

Por los rgb de los colores que quieras usar


Y listo

Moy Diaz B
Estado de México, Mé...
Escrito por Moy Diaz B
el 19/06/2012

Configuracion completa de libchart para colores


En el archivo-> libchart\classes\model\ ChartConfig. Php

Buscamos esta funcion

Public function ChartConfig() {
$this->useMultipleColor = false ;
$this->showPointCaption = true;
$this->sortDataPoint = true;
}

Normalmente esta la opcion $this->useMultipleColor en FALSE , solo hay que cambiarla a TRUE.

Se crea la grafica de forma normal pero se agrega esto con los rgb's que vayan a usar.

Para grafica de barras

$chart->getPlot()->getPalette()->setBarColor(array(
new Color(80, 150, 99),
new Color(255, 0, 50),
new Color(255, 255, 0),
new Color(90, 250, 255),
new Color(224, 198, 165),
new Color(239, 238, 218),
new Color(40, 72, 59),
new Color(71, 112, 132),
new Color(167, 192, 199),
new Color(218, 233, 202)
));

Quedaria de la siguiente forma

$chart = new VerticalBarChart();
$chart->getPlot()->getPalette()->setBarColor(array(
new Color(80, 150, 99),
new Color(255, 0, 50),
new Color(255, 255, 0),
new Color(90, 250, 255),
new Color(224, 198, 165),
new Color(239, 238, 218),
new Color(40, 72, 59),
new Color(71, 112, 132),
new Color(167, 192, 199),
new Color(218, 233, 202)
));

$dataSet = new XYDataSet();
$dataSet->addPoint(new Point("Jan 2005", 273));
$dataSet->addPoint(new Point("Feb 2005", 421));
$dataSet->addPoint(new Point("March 2005", 642));
$dataSet->addPoint(new Point("April 2005", 800));
$dataSet->addPoint(new Point("May 2005", 1200));
$dataSet->addPoint(new Point("June 2005", 1500));
$dataSet->addPoint(new Point("July 2005", 2600));
$chart->setDataSet($dataSet);

$chart->setTitle("Monthly usage for www.example.com");
$chart->render(".. /generated/demo11. Png");

Jamaica Kingston
Panamá, Panamá
Escrito por Jamaica Kingston
el 01/03/2013

Estoy Utilizando esta forma para los colores

$chart->getPlot()->getPalette()->setPieColor(array(
new Color(255, 102, 153),//pendiente
new Color(255, 255, 204),//si
new Color(255, 204, 153)//no
));

$dataSet->addPoint(new Point("pediente- ". 0, 0));

$dataSet->addPoint(new Point("SI - ". 6, 6));
$dataSet->addPoint(new Point("NO - ". 5], 4]));

El problema es que si un dato es cero(0), el toma por defaul , el primer color y lo pone como principal.