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: