Chart-Weather-Forecast
view release on metacpan or search on metacpan
lib/Chart/Weather/Forecast/Temperature.pm view on Meta::CPAN
my $nbr_of_highs = scalar @{$self->highs};
if ( $nbr_of_lows != $nbr_of_highs ) {
die "ERROR: You need to have the same number of high and low values";
}
else {
return $nbr_of_highs;
}
}
sub _build_colors {
my $self = shift;
{
red => Graphics::Color::RGB->new(
{
red => .75,
green => 0,
blue => 0,
alpha => .8
}
),
blue => Graphics::Color::RGB->new(
{
red => 0,
green => 0,
blue => .75,
alpha => .8
}
),
light_blue => Graphics::Color::RGB->new(
{
red => 0,
green => 0,
blue => .95,
alpha => .16
}
),
};
}
##-- Builders
sub _build_chart {
my $self = shift;
# Create the chart canvas
my $chart = Chart::Clicker->new(
width => $self->chart_width,
height => $self->chart_height,
format => $self->chart_format,
);
# Title
$chart->title->text( $self->title_text );
$chart->title->font( $self->title_font );
# Tufte influenced customizations (maximize data-to-ink)
$chart->grid_over(1);
$chart->plot->grid->show_range(0);
$chart->plot->grid->show_domain(0);
$chart->legend->visible(0);
$chart->border->width(0);
return $chart;
}
sub _build_default_ctx {
my $self = shift;
my $default_ctx = $self->chart->get_context('default');
# Set number format of axis
$default_ctx->domain_axis->format(
sub { return $self->number_formatter->format_number(shift); } );
$default_ctx->range_axis->format(
sub { return $self->number_formatter->format_number(shift); } );
# Set font of ticks
$default_ctx->domain_axis->tick_font( $self->tick_font );
$default_ctx->range_axis->tick_font( $self->tick_font );
# The chart type is a "connect the dots" (line segments between data circles)
$default_ctx->renderer( Chart::Clicker::Renderer::Line->new );
$default_ctx->renderer->shape(
Geometry::Primitive::Circle->new( { radius => 3, } ) );
$default_ctx->renderer->brush->width(1);
# Set ticks values for each axis
$default_ctx->domain_axis->tick_values( $self->x_values );
$default_ctx->range_axis->tick_values( $self->range_ticks );
# Set max and min values for each axis.
$default_ctx->domain_axis->range($self->domain);
$default_ctx->range_axis->range($self->range);
return $default_ctx;
}
=head2 BUILD
Here we do some initialization just after the object has been constructed.
Calling these builders here helped me defeat undef occuring from lazy dependencies.
=cut
sub BUILD {
my $self = shift;
$self->_build_y_range;
$self->_build_y_range_padded;
$self->_build_default_ctx;
}
__PACKAGE__->meta->make_immutable;
1
__END__
=head1 Authors
Mateu Hunter C<hunter@missoula.org>
( run in 1.791 second using v1.01-cache-2.11-cpan-df04353d9ac )