[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Рисование графиков: чем?



Viktor Vislobokov wrote:
Elena Egorova wrote:
...
Потом там есть отличный список рассылки с удобным поиском.
А так помочь не могу - времени не хватает. %-(


  На нет и суда нет!

Виктор


Может, все-таки возьмете частя.. то есть перл? :-)))
Внизу подпрограммка, которой я рисую графики из массивов
вроде вашего.

Вот как ее вызвать:

 $file = draw_diagram(\@graph_data, \@LEGEND)

где:
@graph_data = [ ['1.01.2003', 1, '2.01.2003', 2, '3.01.2003', 3], ['4.01.2003', 4, '5.01.2003', 5, '6.01.2003', 6]]
т.е. array, состоящий из array-ев

@LEGEND = ['First', 'Second', 'Third'] - легенда

$file - имя готового графического файла



------------------------------
sub draw_diagram {

  use GD::Graph::lines;
  use GD::Graph::colour qw(:colours :convert);

  my $XLABELN = 25;   # Number of labels by X ticks
  my $XTICKSMAX = 30; # When do not draw X ticks

  my @graph_data = @{$_[0]};
  my @legend    = "{$_[1]};

  my $present_file = int(rand()*100000000000000);

  #----------------------------------------------------------------------
  # Graph adjustments
  #
  my $elem_cnt = @{$graph_data[0]};

my $x_long_ticks = ($elem_cnt <= $XTICKSMAX) ? 1 : 0; # Draw long X ticks?

  my $tmpval = $elem_cnt / $XLABELN;
  my $x_skip = ( int($tmpval) == $tmpval ) ? $tmpval : int($tmpval) + 1;

----------------------------------------------------------------------
  # The graph
  #

  add_colour(boxclr    => [hex2rgb('#9CB2DE')]);
  add_colour(textclr   => [hex2rgb('#000D82')]);
  add_colour(legendclr => [hex2rgb('#D103D1')]);

  my $graph = GD::Graph::lines->new(500, 400);
  $graph->set(
    x_label           => '',
    y_label           => '',
    title             => "Diagram",
    x_label_skip      => $x_skip,
    x_all_ticks       => 1,
    x_labels_vertical => 1,
    x_long_ticks      => $x_long_ticks,
    y_tick_number     => 10,
    y_long_ticks      => 1,
    line_width        => 3,
    fgclr             => 'white',
    boxclr            => 'boxclr',
    labelclr          => 'textclr',
    axislabelclr      => 'textclr',
    legendclr         => 'legendclr',
    valuesclr         => 'textclr',
    textclr           => 'textclr'
  );

  $graph->set_legend(@legend);
  my $gd = $graph->plot(\@graph_data);

  open(IMG, ">$present_file.png");
  binmode IMG;
  print IMG $gd->png;
  close IMG;

  return $present_file;
}




Reply to: