Gtk2::Ex::TreeMap - Implementation of TreeMap.
use Gtk2::Ex::TreeMap; my $values = [6,6,4,3,2,2,1]; my $treemap = Gtk2::Ex::TreeMap->new([600,400]); $treemap->draw_map_simple($values); my $window = Gtk2::Window->new; $window->signal_connect(destroy => sub { Gtk2->main_quit; }); $window->add($treemap->get_image); $window->show_all; Gtk2->main;
Treemap is a space-constrained visualization of hierarchical structures. It is very effective in showing attributes of leaf nodes using size and color coding. http://www.cs.umd.edu/hcil/treemap/
The popular treemaps are;
http://www.marumushi.com/apps/newsmap/newsmap.cfm http://codecubed.com/map.html the del.icio.us most popular treemap http://www.smartmoney.com/marketmap/
This module implements the TreeMap functionality in pure perl. Currently I have implemented only the Squarified TreeMap algorithm. Details of this algorithm can be found at http://www.win.tue.nl/~vanwijk/stm.pdf This algorithm was chosen because it produces aesthetically pleasing rectangles.
All the drawing is done using GD. But Gtk2 adds plenty of life, bells and whistles to the otherwise passive TreeMap png image.
GD
Gtk2
Just a plain old constructor. Accepts two arguments, $width and $height of the TreeMap.
$width
$height
my $treemap = Gtk2::Ex::TreeMap->new([600,400]);
Use this API to quickly build a treemap from a flat list of values. The colors of the rectangles are chosen internally. If you want to do anything serious, like specify colors, description etc, then use the draw_map($tree) api.
draw_map($tree)
my $values = [6,6,4,3,2,2,1]; $treemap->draw_map_simple($values);
This is the api that you will use most of the time. This one accepts a hierarchical tree structure as its input. I have chosen the tree format that is used by the XML::Simple module. This approach so that the tree can be easily constructed from an xml document.
Here is an example definition of the XML
<Node> <Node> <Node size="9" color="0,0,80" description="0 0"/> <Node size="7" color="0,120,80" description="0 1"/> <Node> <Node size="9" color="0,0,100" description="0 2 0"/> <Node size="9" color="0,0,110" description="0 2 1"/> <Node> <Node size="8" color="0,0,100" description="0 2 2 0"/> <Node size="2" color="0,0,110" description="0 2 2 1"/> </Node> </Node> </Node> <Node> <Node size="7" color="0,170,200" description="1 0"/> <Node size="5" color="0,170,210" description="1 1"/> <Node size="9" color="0,170,220" description="1 2"/> </Node> </Node>
Now read this string using XML::Simple to derive the tree.
my $tree = XMLin($xmlstr, ForceArray => 1); $treemap->draw_map($tree);
Note: It is very important to use the ForceArray option. Else you will end up with a variety of errors.
ForceArray
Returns the TreeMap image as a Gtk2::Image wrapped in a Gtk2::EventBox. You can add this to your own Gtk2 container
Gtk2::Image
Gtk2::EventBox
my $window = Gtk2::Window->new; $window->add($treemap->get_image); $window->show_all; Gtk2->main;
* Implement callback for mouse-over and clicked events * Implement popup box as a default option * Implement text in the rectangles * The boxes should probably be drawn with a black border * Build a new example using WWW::Google::News perhaps ! * Once the module is done, may be I'll split it into a two; a pure GD module which will be "used" by a Gtk2 module. That way, non-Gtk2 folks can use it, of course without the popups and callbacks and all those bells and whistles. * More tests, more documentation.
Ofey Aikon, <ofey_aikon at gmail dot com>
<ofey_aikon at gmail dot com>
To the wonderful gtk-perl list.
Copyright 2005 Ofey Aikon, All Rights Reserved.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details.
You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA.
To install Gtk2::Ex::TreeMap, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Gtk2::Ex::TreeMap
CPAN shell
perl -MCPAN -e shell install Gtk2::Ex::TreeMap
For more information on module installation, please visit the detailed CPAN module installation guide.