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 )