use strict; use warnings; use Imager::Heatmap; use PDL; my @insert = sample_data(); $| = 1; print "Generating GIF frame "; my %size = (xsize => 300, ysize => 300); my $t0 = time; my @hms = map { my $h = Imager::Heatmap->new(%size, xsigma => $_, ysigma => $_); $h->insert_datas(@insert); print "."; $h; } 1..90; print " time now=", time - $t0; my $all_vals = pdl map $_->matrix, @hms; # broadcasting version of Imager::Heatmap::draw use PDL::Graphics::ColorSpace; my $frame_max = $all_vals->maxover; $all_vals /= $frame_max->dummy(0); # dims: x*y frame my $hue = (1 - $all_vals)*240; my $d = cat($hue, pdl(1), pdl(1))->mv(-1,0); # dims: hsv x*y frame my $all_hms = (hsv_to_rgb($d) * 255)->byte # rgb x*y frame ->splitdim(1,300); # rgb x y frame # Imager::write_multi $all_hms->wmpeg('heatmapb.gif'); print " and now=", time - $t0, "\n"; sub sample_data { my @insert = (); while () { chomp; push @insert, [ split /\s+/ ] } return @insert } __DATA__ ...