#!/usr/bin/perl use strict; use Data::Dumper; use SVG::Graph; use SVG::Graph::Data; use SVG::Graph::Data::Datum; my @d1 = (); my $head = <>; chomp $head; my @head = split /\t/, $head; shift @head; my($i,$j) = (1,1); while(<>){ chomp; my @cols = split /\t/; shift @cols; $j = 1; foreach my $c (@cols){ $c = int($c); $c = 200 if $c eq 'nan'; # $c = 200 if $c == 0; my $logc = log($c > 0 ? $c : 0.000001) / log(2); # $logc = 10 if $logc > 10; # $logc = 3 if $logc < 3; $logc = undef if $c == 0; #warn $c , "\t", $logc; push @d1, SVG::Graph::Data::Datum->new(x=>$j,y=>$i,z=>$logc); $j++; } $i++; } my $svg = SVG->new(width=>850,height=>850); my $graph = SVG::Graph->new(svg=>$svg,xoffset=>0,yoffset=>0,width=>800,height=>700,margin=>30); my $frame0 = $graph->add_frame; my $frame1 = $frame0->add_frame; my $data1 = SVG::Graph::Data->new(data => \@d1); $frame1->add_data($data1); $frame0->add_glyph('axis','stroke'=>'black','stroke-width'=>2,'x_absolute_ticks'=>1,x_intertick_labels=>\@head); $frame1->add_glyph('heatmap',rgb_h=>[255,0,0],rgb_m=>[0,0,0],rgb_l=>[0,255,0]); print $graph->draw;