Imager-Heatmap
view release on metacpan or search on metacpan
lib/Imager/Heatmap.pm view on Meta::CPAN
xsize => $self->xsize,
ysize => $self->ysize,
channels => 4,
);
my $matrix = $self->matrix;
my ($w, $h) = ($self->xsize, $self->ysize);
my $max = max(@{ $matrix });
unless ($max) {
carp "Nothing to be rendered";
return $img;
}
my %color_cache;
for (my $y = 0; $y < $h; $y++) {
my @linedata = map {
my $hue = int((1 - $_/$max)*240);
my $alpha = int(sqrt($_/$max)*255);
$color_cache{"$hue $alpha"} ||= Imager::Color->new(
hue => $hue,
saturation => 1.0,
value => 1.0,
alpha => $alpha,
);
} @$matrix[$y*$w..$y*$w+$w-1];
$img->setscanline('y' => $y, pixels => \@linedata);
}
return $img;
}
1;
__END__
=head1 NAME
Imager::Heatmap - Perl extension for drawing Heatmap using Imager
=head1 SYNOPSIS
use Imager::Heatmap;
my $hmap = Imager::Heatmap->new(
xsize => 640, # Image width
ysize => 480, # Image height
xsigma => 10, # Sigma value of X-direction
ysigma => 10, # Sigma value of Y-direction
);
# Add point datas to construct density matrix
$hmap->insert_datas(@piont_datas); # @point_datas should be: ( [ x1, y1, weight1 ], [ x2, y2, weight2 ] ... )
$hmap->insert_datas(...); # You can call multiple times to add large data that cannot process at a time.
# After adding datas, you could get heatmap as Imager instance.
my $img = $hmap->draw;
# Returned image is 4-channels image. So you can overlay it on other images.
$base_img->rubthrough( src => $hmap->img ); # Overlay on other images(see Imager::Transformations)
# And you can access probability density matrix using matrix method if you like.
# In case, maybe you would like to create some graduations which be assigned to color of heatmap and its value.
$hmap->matrix;
=head1 DESCRIPTION
Imager::Heatmap is a module to draw heatmap using Imager.
This module calculates probability density matrix from input data and
map a color for each pixels to represent density of input data.
=head1 METHODS
=head2 new()
Create a blessed object of Imager::Heatmap.
You can specify some options as follows.
See the accessors description for more details about each parameters.
$hmap = Imager::Heatmap->new(xsize => 300, ysize => 300);
=head3 Options
=over
=item o xsize (required)
X-direction size of heatmap image.
=item o ysize (required)
Y-direction size of heatmap image.
=item o xsigma (optional, default: 1.0)
Sigma value of X-direction.
=item o ysigma (optional, default: 1.0)
Sigma value of Y-direction.
=item o correlation (optional, default: 0.0)
Correlation between X and Y.
=back
=head2 xsize()
Set/Get the X-direction size of heatmap image.
Constructed matrix will invalidated after call this method as "Setter".
$hmap->xsize(100);
$xsize = $hmap->xsize;
=head2 ysize()
Set/Get the Y-direction size of heatmap image.
( run in 0.653 second using v1.01-cache-2.11-cpan-9581c071862 )