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
|
|
|
| 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."
| |
|
| 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
| |
|
|
| 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.
| |
|
| Thank you all very much!!!! I guess that gives me enough to try out for
the time being.
tospo
| |
|
|
|
|
|