For Programmers: Free Programming Magazines  


Home > Archive > PERL Modules > May 2006 > combining graphs from GD::Graph in one image file









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author combining graphs from GD::Graph in one image file
tospo

2006-05-28, 7:58 am

Does anybody know how I can get more than one graph on a single image
file generated by the GD:Graph module?

I need to generate a lot of histograms which cannot be combined into a
single chart but all of these charts should be combined into one big
image file (doesn't need to be pretty). I need to make a lot of these
so combining the images by hand would not be ideal - is there a way to
do this in GD:Graph?

Thanks a lot!

Dr.Ruud

2006-05-29, 7:58 am

tospo schreef:

> Does anybody know how I can get more than one graph on a single image
> file generated by the GD:Graph module?


Is that a real question? I don't think so. Please read
http://www.catb.org/~esr/faqs/smart-questions.html


> I need to generate a lot of histograms which cannot be combined into a
> single chart


Why not?


> but all of these charts should be combined into one big
> image file (doesn't need to be pretty).


What is your definition of 'combined'? For 'not pretty' you could put
them all transparently on top of each other.


> I need to make a lot of these
> so combining the images by hand would not be ideal - is there a way to
> do this in GD:Graph?


I think you mean GD::Graph. I would use the module GD to do this.

--
Affijn, Ruud

"Gewoon is een tijger."


tospo

2006-05-29, 7:58 am

Apologies if this was unclear and sorry for the typo.

I cannot combine all of my histograms for one dataset into one chart
because there will be dozens of them and the output will not be
readable.

By "not pretty" I meant that it doesn't have to be formatted for
printing or anything. It is fine if this generates a big image that one
needs to scroll through on a computer screen because that's all that I
want to do with it.

So what I want the output of my script to look like is this:

chart 1 chart 2
| |
+------ +---------

chart 3 chart 4
| |
+------ +----------

I couldn't find anything on the internet that shows me how (and if)
this can be done in GD::Graph.

How would I do this with GD?

Thank you very much for your help,

tospo

Peter Scott

2006-05-29, 6:58 pm

On Mon, 29 May 2006 05:15:25 -0700, tospo wrote:
> By "not pretty" I meant that it doesn't have to be formatted for
> printing or anything. It is fine if this generates a big image that one
> needs to scroll through on a computer screen because that's all that I
> want to do with it.


http://www.imagemagick.org/script/p...ick.php#montage

--
Peter Scott
http://www.perlmedic.com/
http://www.perldebugged.com/

Dean Arnold

2006-05-29, 6:58 pm

tospo wrote:
> Apologies if this was unclear and sorry for the typo.
>
> I cannot combine all of my histograms for one dataset into one chart
> because there will be dozens of them and the output will not be
> readable.
>
> By "not pretty" I meant that it doesn't have to be formatted for
> printing or anything. It is fine if this generates a big image that one
> needs to scroll through on a computer screen because that's all that I
> want to do with it.
>
> So what I want the output of my script to look like is this:
>
> chart 1 chart 2
> | |
> +------ +---------
>
> chart 3 chart 4
> | |
> +------ +----------
>
> I couldn't find anything on the internet that shows me how (and if)
> this can be done in GD::Graph.
>
> How would I do this with GD?
>


I think the terms you're (collectively) searching for are
"composite" vs. "tiled", ie, composite mashes all the
charts into a single set of axes; tiled is what is described above.

That said, AFAIK, GD::Graph doesn't directly support tiling;
however, implementing it directly in GD should be pretty
straightforward.

1. Create each chart as a standalone image.

2. Compute the size needed to contain the charts as tiles

3. Create a new GD::Image

4. Copy each chart image into the tiled image at the proper
coordinates

E.g., if all are same size, then (psuedocode):

#
# create charts here as usual, pushing each resulting
# GD::Image object on @charts
#
$Htiled = $Hchart * 2 + $vmargin; # height + some vertical margin
$Wtiled = $Wchart * 2 + $hmargin; # width + some horiz. margin

my $tiled = new GD::Image($Wtiled, $Htiled);
my $white = $tiled->colorAllocate(255, 255, 255);
#
# fill the background
#
$tiled->filledRectangle(0,0,$Wtiled-1, $Htiled-1, $white);
#
# compute coords of each tiled chart
# NOTE: these need adjustment for the margin spacing
#
my @coords = (
0, 0,
$Wtiled/2, 0,
0, $Htiled/2,
$Wtiled/2, $Htiled/2
);

$tiled->copy($_, shift @corrds, shift @coords, 0,0,$Wchart,$Hchart)
foreach (@charts);

open TILED, ">$tiled_file";
binmode TILED;
print TILED $tiled->png();
close TILED;


HTH,
Dean Arnold
Presicient Corp.
tospo

2006-05-29, 6:58 pm

Thank you all very much!!!! I guess that gives me enough to try out for
the time being.

tospo

Ron Savage

2006-05-31, 8:00 am

On Mon, 29 May 2006 22:15:25 +1000, tospo wrote:

Hi tospo


CPAN is your friend. Search for chart. Eg:

http://search.cpan.org/~rsavage/Ima...ick-Chart-1.02/


Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com