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

Hi Monks,

i'm a Perl newbie trying to create a 3-levels stacked barchart chart using DBD:Chart, but so far i had no luck.

#!/usr/bin/perl -w use DBI; use DBD::Chart; $dbh = DBI->connect('dbi:Chart:'); $dbh->do('create table stackbar (name varchar(10), yl integer, yh inte +ger)'); $sth = $dbh->prepare('insert into stackbar values(?, ?, ?)'); $sth->execute('foo', 1, 20); $sth->execute('foo', 20, 30); $sth->execute('foo', 50, 30); $sth->execute('bar', 1, 30); $sth->execute('bar', 30, 40); $sth->execute('bar', 70, 40); $sth = $dbh->prepare("select barchart from stackbar where WIDTH=500 AND HEIGHT=500 AND X_AXIS='Some Domain' AND Y_AXIS='Some Range' AND TITLE='Stacked Barchart Test' AND FORMAT='PNG' AND STACK=1 AND SHOWVALUES=1 AND COLORS IN ('green', 'yellow', 'red')"); $sth->execute; $row = $sth->fetchrow_arrayref; open(OUTF, ">barchart_graph.png"); binmode OUTF; print OUTF $$row[0]; close OUTF; $sth->finish; $dbh->disconnect;
From the above code i expect a chart composed of 2 bars, each divided in 3 levels with different colors:

'foo': 1->20 green, 20->50 yellow, 50->80 red

'bar': 1->30 green, 30->70 yellow, 70->110 red

but what i get, instead, is a chart composed of 2 bars with 2 levels only:

'foo': 1->50 green, 50->80 yellow

'bar': 1->70 green, 70->110 yellow

What's wrong with my script?

Replies are listed 'Best First'.
Re: DBD::Chart: unable to create a 3 levels stacked barchart
by renodino (Curate) on Dec 10, 2007 at 16:27 UTC
    The stacked range values must be applied in a single tuple; see the following code:
    #!/usr/bin/perl -w use DBI; use DBD::Chart; $dbh = DBI->connect('dbi:Chart:'); $dbh->do('create table stackbar (name varchar(10), y1 integer, y2 inte +ger, y3 integer, y4 integer)'); $sth = $dbh->prepare('insert into stackbar values(?, ?, ?, ?, ?)'); $sth->execute('foo', 20, 30, 50, 80); $sth->execute('bar', 30, 40, 70, 90); $sth = $dbh->prepare("select barchart from stackbar where WIDTH=500 AND HEIGHT=500 AND X_AXIS='Some Domain' AND Y_AXIS='Some Range' AND TITLE='Stacked Barchart Test' AND FORMAT='PNG' AND STACK=1 AND SHOWVALUES=1 AND COLORS IN ('green', 'yellow', 'red', 'blue')"); $sth->execute; $row = $sth->fetchrow_arrayref; open(OUTF, ">badfloatbar.png"); binmode OUTF; print OUTF $$row[0]; close OUTF; $sth->finish; $dbh->disconnect;

    Perl Contrarian & SQL fanboy