GD-Chart-Radial
view release on metacpan or search on metacpan
examples/radial.pl view on Meta::CPAN
#!/usr/bin/perl -w
use strict;
use GD::Chart::Radial;
my $chart = GD::Chart::Radial->new(500,500,1);
my $max = 31;
$chart->set(
legend => [qw/april may/],
title => 'Some simple graph',
y_max_value => $max,
y_tick_number => 5,
);
my @data = ([qw/A B C D E F G/],[12,21,23,30,23,22,5],[10,20,21,24,28,15,9]);
$chart->plot(\@data);
open(IMG, '>test.jpg') or die $!;
lib/GD/Chart/Radial.pm view on Meta::CPAN
=head2 set
This accessor sets attributes of the graph such as the Title
$chart->set(title=>"This is a chart");
or
$chart->set(
legend => [qw/april may/],
title => 'Some simple graph',
y_max_value => $max,
y_tick_number => 5,
style => 'Notch',
colours => [qw/white black red blue green/],
);
Style can be Notch, Circle, Polygon or Fill. The default style is Notch. Where
style is set to Fill, the data sets are also filled, as opposed to lines drawn
for all other styles
lib/GD/Chart/Radial.pm view on Meta::CPAN
Colours can be any of the following: white, black, red, blue, purple, green,
grey, light_grey, dark_grey, cream, yellow, orange. The first colour is used
for the background colour, the second is used for the scale markings, while
the remaining colours represent the different data sets. If there are less
colours than data sets, colours will be taken from the unused set of defined
colours.
The default list of colours are white, black, red, blue and green, i.e. white
background, black scale markings and data sets in red blue and green.
Both legend and title can be undefined. If this is the case then the relavent
entry will not appear on the graph. This is useful if you plan to use other
forms of labelling along with the graph, and only require the image.
=cut
sub set {
my $self = shift;
my %attributes = @_;
foreach my $attribute (%attributes) {
next unless ($attributes{$attribute});
lib/GD/Chart/Radial.pm view on Meta::CPAN
delete $AllColours{$_} for($BGColour,$FGColour,@DSColours);
push @DSColours, keys %AllColours;
while(scalar(@labels) > scalar(@DSColours) || scalar(@values) > scalar(@DSColours)) {
push @DSColours, @DSColours;
}
#print STDERR "\n#Colours:";
#print STDERR "\n#Background=$BGColour";
#print STDERR "\n#Markings =$FGColour";
#print STDERR "\n#Labels =".(join(",",@DSColours));
#print STDERR "\n#Legends =".(join(",",@{$self->{legend}}));
#print STDERR "\n";
#print STDERR "\n#Data:";
#print STDERR "\n#Labels=".(join(",",@labels));
#print STDERR "\n#Points=[".(join("][", map{join(",",@$_)} @values))."]";
#print STDERR "\n";
my $Max = 0;
my $r = 0;
foreach my $values (@values) {
my $record = { Colour => $DSColours[$r] };
$record->{Label} = $self->{legend}->[$r] if($self->{legend});
my $v = 0;
foreach my $value (@$values) {
$record->{Values}->{$labels[$v]} = $value;
$Max = $value if($Max < $value);
$v++;
}
push(@records,$record);
$r++;
}
lib/GD/Chart/Radial.pm view on Meta::CPAN
my $a = 0;
foreach my $key (@labels) {
push (@axis, { Label => "$key" });
$axis_lookup{$key} = $a;
$longest_axis_label = length $key
if (length $key > $longest_axis_label);
$a++;
}
my $number_of_axis = scalar @axis;
my $legend_height = 0;
if($self->{legend}) {
$legend_height = 8 + (15 * scalar @{$self->{records}});
}
my $left_space = 15 + $longest_axis_label * 6;
my $right_space = 15 + $longest_axis_label * 6;
my $top_space = $self->{title} ? 50 : 15;
my $bottom_space = $self->{legend} ? 30 + $legend_height : 15;
unless($self->{width}) { $self->{width} = 200 + $left_space + $right_space; }
unless($self->{height}) { $self->{height} = 200 + $top_space + $bottom_space; }
my $x_radius = int(($self->{width} - $left_space - $right_space) / 2);
my $y_radius = int(($self->{height} - $top_space - $bottom_space) / 2);
my $min_radius = 100;
$x_radius = $min_radius if($x_radius < $min_radius);
$y_radius = $min_radius if($y_radius < $min_radius);
lib/GD/Chart/Radial.pm view on Meta::CPAN
# draw scale values
my $x = $axis[0]->{X};
my $y = $axis[0]->{Y};
for (my $j = 0 ; $j <= $scale{Max} ; $j+=int($scale{Max} / $scale{Divisions})) {
my $x_interval_1 = $x_centre + ($x * ($x_radius / $scale{Max}) * $j);
my $y_interval_1= $y_centre + ($y * ($y_radius / $scale{Max}) * $j);
$self->{_im}->string($self->{fonts}->{Legend}, $x_interval_1 + 2,$y_interval_1 - 4,$j,$colours{$scale{Colour}});
}
# draw Legend
if($self->{legend}) {
my $longest_legend = 0;
foreach my $record (@{$self->{records}}) {
$longest_legend = length $record->{Label}
if ( $record->{Label} && length $record->{Label} > $longest_legend );
}
my ($legendX, $legendY) = (
($width / 2) - (6 * (length "Legend") / 2) - ($x_radius * 0.75),
($height - ($legend_height + 20))
);
$self->{_im}->string($self->{fonts}->{Legend},$legendX,$legendY,"Legend",$colours{$scale{Colour}});
my $legendX2 = $legendX - (($longest_legend * 5) + 2);
$legendY += 15;
$r = 0;
foreach my $record (@{$self->{records}}) {
$self->{_im}->string($self->{fonts}->{Label},$legendX2,$legendY,$record->{Label},$colours{$record->{Colour}}) if($record->{Label});
$self->{_im}->line($legendX+10,$legendY+4,$legendX + 35,$legendY+4,$colours{$record->{Colour}});
$self->draw_shape($legendX+22,$legendY+4,$colours{$record->{Colour}},$r);
$legendY += 15;
$r++;
}
}
# draw title
if($self->{title}) {
my ($titleX, $titleY) = ( ($width / 2) - (6 * (length $self->{title}) / 2),20);
$self->{_im}->string($self->{fonts}->{Title},$titleX,$titleY,$self->{title},$colours{$scale{Colour}});
}
return 1;
eval { $chart->set() };
ok(!$@,'no errors on empty set');
diag($@) if(@_);
eval { $chart->plot() };
ok(!$@,'no errors on empty plot');
diag($@) if(@_);
eval {
$chart->set(
legend => [qw/april may/],
title => 'Some simple graph',
y_max_value => $max,
y_tick_number => 5,
style => $style,
colours => ['white', 'light_grey', 'red', '#00f', '#00ff00'],
);
};
ok(!$@,'no errors with set values');
diag($@) if(@_);
t/03points.t view on Meta::CPAN
eval { $chart->set() };
ok(!$@,'no errors on empty set');
diag($@) if(@_);
eval { $chart->plot() };
ok(!$@,'no errors on empty plot');
diag($@) if(@_);
eval {
$chart->set(
legend => [qw/april may/],
title => 'Some simple graph',
y_max_value => $max,
y_tick_number => 5,
style => $style,
colours => ['white', 'light_grey', 'red', '#00f', '#00ff00'],
);
};
ok(!$@,'no errors with set values');
diag($@) if(@_);
( run in 0.940 second using v1.01-cache-2.11-cpan-49f99fa48dc )