my %angles; #I get angles from a file my ($key1, $key2, @colors); my ($i, $j) = 0; my $red_val= 0; my $yellow_val = 90; my $green_val = 180; my $angle; my $im = new GD::Image (150, 1500); foreach $key1 (sort (keys %angles)) { foreach $key2 (sort (keys %{$angles{$key1}})) { $angle = ${$angles{$key1}}{$key2} if ($angle <= $yellow_val) { $colors[$i]->[$j] = $im->colorAllocate(255, 255*(($angle-$red_val)/($yellow_val-$red_val)), 0); } else { $colors[$i]->[$j] = $im->colorAllocate(255*(($green_val - $angle)/($yellow_val - $red_val)), 255*(1-(1-($angle-$green_val)/($yellow_val-$green_val)))*.5, 0); } $j++; } $j = 0; $i++; }