http://qs321.pair.com?node_id=540964

Stegalex has asked for the wisdom of the Perl Monks concerning the following question:

Quick Question: Has anyone been able to successfully generate an imagemap for a 3d chart using the GD-Graph-bars3d module?

I have been able to do this for 2d bar and line graphs but it seems that axestype3d.pm does not contain a get_hotspot method.


~~~~~~~~~~~~~~~
I like chicken.

Replies are listed 'Best First'.
Re: GD-Graph-bars3d
by zentara (Archbishop) on Apr 03, 2006 at 16:53 UTC
    This works, (don't know about get_hotspot, where do you come up with that?)
    #!/usr/bin/perl use strict; use warnings; use GD::Graph::bars3d; # sample data my @data = (30, 45, 36, 42, 40, 44, 41, 39, 35, 46, 43, 38); my @dt = ('2002-10-10 00:00:00', '2002-10-10 01:00:00', '2002-10-10 02 +:00:00', '2002-10-10 03:00:00', '2002-10-10 04:00:00', '2002-10-10 05:00:00', '2002-10-10 06:00:00', '2002-10-10 07:00:00', '2002-10-10 08:00:00', '2002-10-10 09:00:00', '2002-10-10 10:00:00', '2002-10-10 11:00:00'); # setup the color set my @colors; for my $datum (@data) { push(@colors, get_color($datum)); } # create the data set for the graph my @dataset = (\@dt, \@data); # create the new graph my $graph = GD::Graph::bars3d->new( 400, 300 ); # setup the graph options $graph->set( transparent => '0', bgclr => 'lgray', boxclr => 'white', fgclr => 'white', x_label => 'Date / Time', y_label => 'Number of Woozles Sold', title => 'World Wide Woozle Sales', dclrs => \@colors, cycle_clrs => 1, # this is mandatory for this to work x_labels_vertical => 1, ); # plot the graph my $gd = $graph->plot(\@dataset); # create a PNG file of the graph open(IMG, ">$0.png") or die $!; binmode IMG; print IMG $gd->png; # returns the color name based on the value given # this is only an example # you should base your numbers off of your actual data sub get_color { my $value = shift; return "dpurple" if ($value < 34); return "lpurple" if ($value < 36); return "blue" if ($value < 38); return "green" if ($value < 40); return "yellow" if ($value < 42); return "orange" if ($value < 44); return "red"; }

    I'm not really a human, but I play one on earth. flash japh

      That's an image, not an imagemap. An imagemap is a list of shapes defining the mouse-clickabable areas of an image. Maybe you should have read up on get_hotspots in the GD::Graph documentation before declaring it irrelevant.

      And the OP is correct, it's not supported by bars3d. I looked at the source code. bars sets $self->{_hotspots}->[$ds]->[$i], but bars3d does not. The newest GD::Graph3d is 4 years older than the newest GD::Graph. Hotspot support probably didn't exist in GD::Graph back then, given that it's currently in beta.

        Well you know more than me.:-) I'm glad that you recognized that a subroutine, that does not exist in the module, is somehow relevant.

        I'm not really a human, but I play one on earth. flash japh