• Publicidad

ChartDirector - Gráfica de pareto

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

ChartDirector - Gráfica de pareto

Notapor seafree » 2015-10-02 15:35 @691

Buenas tardes, estoy haciendo una gráfica de Pareto y al personalizar la imagen web de la gráfica obtengo diferencias de tamaño entre el área de dibujo de la gráfica y el área del dibujo, esto es, tengo el siguiente código para crear la gráfica:

my $c = new XYChart(800, 450, perlchartdir::goldColor() );
$c->addTitle("FALLAS DE PROCESOS", "arialbd.ttf",14);
$c->setPlotArea(350, 60, 400, 365, 0xffffff,-1,-1,$perlchartdir::Transparent,$perlchartdir::Transparent);

Les agradeceré sus comentarios porque no encuentro lo que está sucediendo.

Gracias.
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Publicidad

Re: ChartDirector - Gráfica de pareto

Notapor explorer » 2015-10-02 17:58 @790

A mi me gustaría ver una captura de pantalla en el antes y el después de los cambios. Sospecho que la introducción de alguno de los titulares modifica el área disponible para el gráfico.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: ChartDirector - Gráfica de pareto

Notapor seafree » 2015-10-05 11:08 @506

Gracias por responder, el código inicial es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. # Include current script directory in the module path (needed on Microsoft IIS).
  4. # This allows this script to work by copying ChartDirector to the same directory
  5. # as the script (as an alternative to installation in Perl module directory)
  6. use File::Basename;
  7. use lib dirname($0);
  8.  
  9. use perlchartdir;
  10.  
  11. # The data for the chart
  12. my $data = [40, 15, 7, 5, 2];
  13.  
  14. # The labels for the chart
  15. my $labels = ["Hard Disk", "PCB", "Printer", "CDROM", "Keyboard"];
  16.  
  17. # Create a XYChart object of size 400 x 225 pixels. Use golden background color, with
  18. # a 2 pixel 3D border.
  19. my $c = new XYChart(400, 225, perlchartdir::goldColor(), -1, 2);
  20.  
  21. # Add a title box using Arial Bold/11 pt font. Set the background color to metallic
  22. # blue (9999FF). Use a 1 pixel 3D border.
  23. $c->addTitle("Hardware Defects", "arialbd.ttf", 11)->setBackground(
  24.     perlchartdir::metalColor(0x9999ff), -1, 1);
  25.  
  26. # Set the plotarea at (50, 40) and of 300 x 150 pixels in size, with a silver
  27. # background color.
  28. $c->setPlotArea(50, 40, 300, 150, perlchartdir::silverColor());
  29.  
  30. # Add a line layer for the pareto line
  31. my $lineLayer = $c->addLineLayer();
  32.  
  33. # Compute the pareto line by accumulating the data
  34. my $lineData = new ArrayMath($data);
  35. $lineData->acc();
  36.  
  37. # Set a scaling factor such as the maximum point of the line is scaled to 100
  38. my $scaleFactor = 100 / $lineData->max();
  39.  
  40. # Add the pareto line using the scaled data. Use deep blue (0x80) as the line color,
  41. # with light blue (0x9999ff) diamond symbols
  42. $lineLayer->addDataSet($lineData->mul2($scaleFactor)->result(), 0x000080
  43.     )->setDataSymbol($perlchartdir::DiamondSymbol, 9, 0x9999ff);
  44.  
  45. # Set the line width to 2 pixel
  46. $lineLayer->setLineWidth(2);
  47.  
  48. # Add a multi-color bar layer using the given data.
  49. my $barLayer = $c->addBarLayer3($data);
  50.  
  51. # Bind the layer to the secondary (right) y-axis.
  52. $barLayer->setUseYAxis2();
  53.  
  54. # Set soft lighting for the bars with light direction from the right
  55. $barLayer->setBorderColor($perlchartdir::Transparent, perlchartdir::softLighting(
  56.     $perlchartdir::Right));
  57.  
  58. # Set the labels on the x axis.
  59. $c->xAxis()->setLabels($labels);
  60.  
  61. # Set the primary y-axis scale as 0 - 100 with a tick every 20 units
  62. $c->yAxis()->setLinearScale(0, 100, 20);
  63.  
  64. # Set the label format of the y-axis label to include a percentage sign
  65. $c->yAxis()->setLabelFormat("{value}%");
  66.  
  67. # Add a title to the secondary y-axis
  68. $c->yAxis2()->setTitle("Frequency");
  69.  
  70. # Set the secondary y-axis label foramt to show no decimal point
  71. $c->yAxis2()->setLabelFormat("{value|0}");
  72.  
  73. # Set the relationship between the two y-axes, which only differ by a scaling factor
  74. $c->syncYAxis(1 / $scaleFactor);
  75.  
  76. # Output the chart
  77. binmode(STDOUT);
  78. print "Content-type: image/png\n\n";
  79. print $c->makeChart2($perlchartdir::PNG);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Código modificado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.8.8;
  3. use perlchartdir;
  4. use CGI;
  5. use CGI qw':standard *table';
  6. use DBI;
  7. use POSIX;
  8.  
  9. my $query = new CGI;
  10. #---------------------------------------------------#
  11. my $p_gerencia = ($query->param("gerencia"));
  12. my $p_zona = ($query->param("subarea"));
  13. my $p_subest = ($query->param("cve_inst"));
  14. my $p_event = ($query->param("evento"));
  15. my $f_ini = ($query->param("date1"));
  16. $f_ini=~ s/\//-/g;
  17. $f_ini.=" 01:01:00";
  18. my $f_fin = ($query->param("date2"));
  19. $f_fin=~ s/\//-/g;
  20. $f_fin.=" 23:59:00";
  21. my $sql_sistemas; my $sth_sistemas; my $reg_sistemas; my $sql_frecuencia;
  22. my $homoclave; my $labels=[]; my $data=[];
  23. my $dbh = DBI->connect("DBI:Pg:dbname=db_icev;host=localhost", "adm", "", {'RaiseError' => 1});
  24.  
  25. $sql_sistemas="SELECT cs.homoclave, count(*) as total ";
  26. $sql_sistemas.="FROM t_eventos te, c_tipo_componentes ctc, c_componentes cc, c_subsistemas cs ";
  27. $sql_sistemas.= "WHERE (te.fecha_sale BETWEEN '$f_ini' AND '$f_fin') AND te.subestacion='$p_subest' AND te.id_tipo_componente=ctc.id_tipo_componente AND ctc.id_componente=cc.id_componente AND cc.id_subsist=cs.homoclave GROUP BY cs.homoclave ORDER BY total desc ";
  28. $sth_sistemas= $dbh->prepare($sql_sistemas) or die $DBI::errstr;
  29. $sth_sistemas->execute();
  30. #--------------------LABELS------------------------#
  31. while($reg_sistemas= $sth_sistemas->fetchrow_hashref()){
  32.         $homoclave=$reg_sistemas->{'homoclave'};
  33.         $total=$reg_sistemas->{'total'};
  34.         #Creacion de las etiquetas (Eje X)
  35.         push (@$labels, $homoclave); #Etiquetas de la grafica
  36.         #Creacion de las frecuencias (Eje Y)
  37.         push (@$data, $total); #Etiquetas de la grafica
  38. }
  39. #--------------------DATA------------------------#
  40. #DATOS DE FRECUENCIA (Eje Y)
  41. my $c = new XYChart(800, 450, perlchartdir::goldColor() );
  42. $c->addTitle("FALLAS DE PROCESOS", "arialbd.ttf",14);
  43. #Adicionar una linea para la linea de pareto
  44. my $lineLayer = $c->addLineLayer();
  45. # Adicionar los datos
  46. my $lineData = new ArrayMath($data);
  47. $lineData->acc();
  48. my $scaleFactor = 100 / $lineData->max();
  49. $lineLayer->addDataSet($lineData->mul2($scaleFactor)->result(), 0x000080)->setDataSymbol($perlchartdir::DiamondSymbol, 9, 0x9999ff);
  50. $lineLayer->setLineWidth(2);
  51. my $barLayer = $c->addBarLayer3($data);
  52. $barLayer->setUseYAxis2();
  53. $barLayer->setBorderColor($perlchartdir::Transparent, perlchartdir::softLighting($perlchartdir::Right));
  54. #Espacio entre las barras
  55. $barLayer->setBarWidth(60);
  56. $c->xAxis()->setLabels($labels);
  57. $c->yAxis()->setLinearScale(0, 100, 20);
  58. $c->yAxis()->setLabelFormat("{value}%");
  59. $c->yAxis2()->setTitle("Frecuencia");
  60. # Set the secondary y-axis label foramt to show no decimal point
  61. $c->yAxis2()->setLabelFormat("{value|0}");
  62. # Set the relationship between the two y-axes, which only differ by a scaling factor
  63. $c->syncYAxis(1 / $scaleFactor);
  64. my $pareto_url= $c->makeTmpFile("/tmp/tmpcharts");
  65.  
  66. # Output the chart
  67. binmode(STDOUT);
  68. print "Content-type: image/png\n\n";
  69. print $c->makeChart2($perlchartdir::PNG);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


En el codigo modificado, como podras observar, cambio de posición la gráfica pero el color de fondo amarillo empieza desde la línea superior izquierda de la pantalla y requiero que se mueva deacuerdo a la gráfica.

Gracias.
Última edición por explorer el 2015-10-05 12:15 @552, editado 1 vez en total
Razón: Poner marcasde código Perl
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Re: ChartDirector - Gráfica de pareto

Notapor explorer » 2015-10-05 13:10 @590

No sé decirte. No tengo instalado ni puedo instalarme CharDirector, así que no sé qué puede pasar. Te dije que me interesaba ver más las capturas de pantalla que el código usado, pues aunque el código está bien, ver las imágenes te puede dar más pistas.

Yo lo que haría sería identificar la línea que provoca el cambio. Usaría una búsqueda binaria (comentar la mitad de las líneas para ver si es en esa parte o en la otra donde se produce el error. Una vez que sabemos qué parte es la culpable, la reducimos des/comentando la cuarta parte, y así hasta localizar la línea que provoca el cambio).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: ChartDirector - Gráfica de pareto

Notapor seafree » 2015-10-05 15:37 @692

Gracias, explorer, ya identifiqué la línea que provoca el cambio. Es un <div>, que más adelante definiré dónde es más conveniente ubicarlo.

Gracias por tu atención.
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados