in reply to Which tk to use and how to show images?
From the Perldoc for GD::Graph
What that means, is that everytime you update your graph, you will get a memory increase. If it is a long running program, it will become unacceptable.BUGS GD::Graph objects cannot be reused. To create a new plot, you have to +create a new GD::Graph object.
For something simple like a bar graph, you would be better of making a Tk Canvas, and creating rectangles to show your bars. It won't leak memory when you update, and you would be able to add more color to the bars. Additionally, it will use less memory than a script that uses GD.
In this example, I have it upside down. You can add axis and text if you want. It is also just a "quick demo", and the design can be improved upon.
#!/usr/bin/perl use warnings; use strict; use Tk; use MeM; my $w=20; my $x=0; my $y=0; my %colors = ( 0 => ['black','yellow'], 1 => ['yellow','black'], 2 => ['white','green'], 3 => ['green','white'], 4 => ['grey','red'], 5 => ['red','grey'], 6 => ['blue','white'], 7 => ['white','blue'], 8 => ['orange','grey45'], 9 => ['grey45','orange'], ); my %bardata = ( 0 => rand 200, 1 => rand 200, 2 => rand 200, 3 => rand 200, 4 => rand 200, 5 => rand 200, 6 => rand 200, 7 => rand 200, 8 => rand 200, 9 => rand 200, ); my %bars; my $mw=tkinit; my $c = $mw->Canvas->pack; for (0..9) { $bars{$_} = $c->createRectangle($x,$y,$x+20,$bardata{$_}, -fill=> ${$colors{$_}}[0], ); my $text = $c->createText($x+10,$y+10, -anchor=>'center', -fill => ${$colors{$_}}[1], -text => $_ ); $x+=20; } $mw->Button( -text => "Save", -command => [sub { $c->update; my @capture=(); my ($x0,$y0,$x1,$y1)=$c->bbox('all'); @capture=('-x'=>$x0,'-y'=>$y0,-height=>$y1-$y0,-width=>$x1-$x +0); $c -> postscript(-colormode=>'color', -file=>$0.'.ps', -rotate=>90, -width=>800, -height=>500, @capture); } ] )->pack; $mw->repeat(2000, sub{ &update }); MainLoop; ########################################################## sub update{ $x=0; $y=0; %bardata = ( 0 => rand 200, 1 => rand 200, 2 => rand 200, 3 => rand 200, 4 => rand 200, 5 => rand 200, 6 => rand 200, 7 => rand 200, 8 => rand 200, 9 => rand 200, ); for (0..9) { $c->delete( $bars{$_} ); $bars{$_} = $c->createRectangle($x,$y,$x+20,$bardata{$_}, -fill=> ${$colors{$_}}[0], ); my $text = $c->createText($x+10,$y+10, -anchor=>'center', -fill => ${$colors{$_}}[1], -text => $_ ); $x+=20; } }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Which tk to use and how to show images?
by BrowserUk (Patriarch) on Nov 04, 2005 at 15:32 UTC | |
by zentara (Cardinal) on Nov 04, 2005 at 17:40 UTC | |
by BrowserUk (Patriarch) on Nov 04, 2005 at 17:44 UTC | |
by rcseege (Pilgrim) on Nov 04, 2005 at 17:51 UTC | |
by BrowserUk (Patriarch) on Nov 04, 2005 at 17:58 UTC | |
| |
by Sinatra (Novice) on Nov 14, 2005 at 14:10 UTC |