The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use Data::Dumper;
use SVG::Graph;
use SVG::Graph::Data;
use SVG::Graph::Data::Datum;

my $graph = SVG::Graph->new( width => 800, height => 800, margin => 30 );

my $frame0 = $graph->add_frame;
$frame0->stack(1);
my $frame1 = $frame0->add_frame;
my $frame2 = $frame0->add_frame;
my $frame3 = $frame0->add_frame;
my $frame4 = $frame0->add_frame;

my @d1 = ();
my @d2 = ();
my @d3 = ();
my @d4 = ();

for ( 1 .. 10 ) {
    push @d1, SVG::Graph::Data::Datum->new( x => $_, y => int( rand(10) ) );
}
for ( 1 .. 10 ) {
    push @d2, SVG::Graph::Data::Datum->new( x => $_, y => int( rand(10) ) );
}
for ( 1 .. 10 ) {
    push @d3, SVG::Graph::Data::Datum->new( x => $_, y => int( rand(10) ) );
}
for ( 1 .. 10 ) {
    push @d4, SVG::Graph::Data::Datum->new( x => $_, y => int( rand(10) ) );
}

my $data1 = SVG::Graph::Data->new( data => \@d1 );
my $data2 = SVG::Graph::Data->new( data => \@d2 );
my $data3 = SVG::Graph::Data->new( data => \@d3 );
my $data4 = SVG::Graph::Data->new( data => \@d4 );

$frame1->add_data($data1);
$frame2->add_data($data2);
$frame3->add_data($data3);
$frame4->add_data($data4);

$frame0->add_glyph(
    'axis',
    x_absolute_ticks => 1,
    'stroke'         => 'black',
    'stroke-width'   => 2
);

$frame1->add_glyph(
    'bar',
    'fill'         => 'red',
    'fill-opacity' => 0.5,
    stroke         => 'red'
);
$frame2->add_glyph(
    'bar',
    'fill'         => 'blue',
    'fill-opacity' => 0.5,
    stroke         => 'blue'
);
$frame3->add_glyph(
    'bar',
    'fill'         => 'yellow',
    'fill-opacity' => 0.5,
    stroke         => 'yellow'
);
$frame4->add_glyph(
    'bar',
    'fill'         => 'green',
    'fill-opacity' => 0.5,
    stroke         => 'green'
);

print $graph->draw;