App-Widget-ChartDirector
view release on metacpan or search on metacpan
lib/App/Widget/ChartDirector.pm view on Meta::CPAN
my $x = $self->get_x($spec);
my $yn = $self->get_y($spec);
my $data;
foreach my $y (@$yn) { push (@$data, @{$y}); }
if ($#$x > 0) {
$c->setData($data, $x);
}
else {
$c->setData($data, $spec->{y_labels});
}
# The depths for the sectors
#my $depths = [30, 20, 10, 10];
#$c->set3D2($depths);
#$c->setStartAngle(225);
$c->set3D() if ($spec->{"3D"});
$c->makeChart($spec->{image_path});
&App::sub_exit() if ($App::trace);
}
#my $data = [25, 18, 15, 12, 8, 30, 35];
##The labels for the pie chart
#my $labels = ["Labor", "Licenses", "Taxes", "Legal", "Insurance", "Facilities",
# "Production"];
##Create a PieChart object of size 360 x 300 pixels
#my $c = new PieChart(360, 300);
##Set the center of the pie at (180, 140) and the radius to 100 pixels
#$c->setPieSize(180, 140, 100);
##Add a title to the pie chart
#$c->addTitle("Project Cost Breakdown");
##Draw the pie in 3D
#$c->set3D();
##Set the pie data and the pie labels
#$c->setData($data, $labels);
# TODO: This one doesn't work yet
sub write_step_graph_image_step {
&App::sub_entry if ($App::trace);
my ($self, $spec) = @_;
require "perlchartdir.pm";
#Create a XYChart object of size 500 x 270 pixels, with a pale blue (0xe0e0ff)
#background, a light blue (0xccccff) border, and 1 pixel 3D border effect.
my $c = new XYChart(600, 350, 0xe0e0ff, 0xccccff, 1); #800
#Set the plotarea at (50, 50) and of size 420 x 180 pixels, using white
#(0xffffff) as the plot area background color. Turn on both horizontal and
#vertical grid lines with light grey color (0xc0c0c0)
$c->setPlotArea(50, 50, 320, 260, 0xffffff)->setGridColor(0xc0c0c0, 0xc0c0c0); #720
#Add a legend box at (55, 25) (top of the chart) with horizontal layout. Use 10
#pts Arial Bold Italic font. Set the background and border color to Transparent.
$c->addLegend(55, 20, 0, "arialbi.ttf", 10)->setBackground($perlchartdir::Transparent);
#Add a title to the chart using 14 points Times Bold Itatic font, using blue
#(0x9999ff) as the background color
$c->addTitle("Rate History", "arialbi.ttf", 12)->setBackground(0x9999ff);
#Set the y axis label format to display a percentage sign
#$c->yAxis()->setLabelFormat("{value}%");
my $labels = $spec->{labels} || [ "Unknown" ];
my $default_colors =
[ 0x0000ff, 0x00ff00, 0xff0000, 0x00ffff, 0xff00ff, 0xffff00,
0x111199, 0x119911, 0x991111, 0x119999, 0x991199, 0x999911,
0x3333dd, 0x33dd33, 0xdd3333, 0x33dddd, 0xdd33dd, 0xdddd33,
0x2222bb, 0x22bb22, 0xbb2222, 0x22bbbb, 0xbb22bb, 0xbbbb22 ];
my $colors = $spec->{colors} || $default_colors;
my ($label, $color, $step_xaxis, $xaxis, $yaxis, $layer);
for (my $i = 0; $i <= $#$labels; $i++) {
$label = $labels->[$i];
$color = $colors->[$i] || 0;
if ($color =~ /^0[xX][0-9A-Fa-f]+$/) {
$color = eval $color;
}
$xaxis = $spec->{"x$i"} || [ $i, $i+1, $i+2, $i+3 ];
$yaxis = $spec->{"y$i"} || [ $i, $i+1, $i+2, $i+3 ];
# set the xAxis scale
#$c->xAxis()->setLinearScale($xaxis->[0] - 1, $xaxis->[$#$xaxis], 1, 0);
$c->xAxis()->setAutoScale(0,0,1);
$c->yAxis()->setAutoScale(0,0,1);
$c->xAxis()->setIndent(1);
# we decrement the $step_xaxis values by a day to account for the fact that
# the step function runs from left to right but that the spec-> occurred
# from right to left.
$step_xaxis = [ @$xaxis ]; # make a copy
for (my $x = 0; $x <= $#$step_xaxis; $x++) {
$step_xaxis->[$x]--;
}
#Add a step line layer to the chart and set the line width to 2 pixels
$layer = $c->addStepLineLayer($yaxis, $color, $label);
#$layer->setXData($step_xaxis);
$layer->setLineWidth(2);
# Add a line layer to the chart
# $layer = $c->addLineLayer();
# Add the line. Plot the points with a 9 pixel diamond symbol
# $layer->addDataSet($yaxis, $color)->setDataSymbol( $perlchartdir::DiamondSymbol, 9);
# Enable data label on the data points. Set the label format to nn%.
# $layer->setDataLabelFormat("{value}");
}
print $c->makeChart($spec->{image_path});
&App::sub_exit() if ($App::trace);
}
sub write_step_graph_image {
&App::sub_entry if ($App::trace);
my ($self, $spec) = @_;
my $c = $self->new_xy_chart($spec);
my $x = $self->get_x($spec);
my $yn = $self->get_y($spec);
my ($layer, $dataset);
my @symbols = (
{ symbol => $perlchartdir::SquareSymbol, size => 7, },
( run in 2.677 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )