DBD::Chart 3D bargraphs with temporal datatype as X
am 13.06.2007 17:15:04 von frederic.sorianoHi list,
I tried to produce a 3D barchart with DBD::Chart thanks to this code
sample (source: Perl for Oracle DBAs, ORA):
--snip--
use DBI;
use strict;
my $dbh= DBI->connect('dbi:Chart:', undef, undef, { PrintError => 1,
RaiseError => 1 });
$dbh->do('CREATE TABLE spiritaxis (
Month char(3),
Visitors integer,
Monument varchar(11))');
my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my @monuments = qw(Stonehenge Avebury SilburyHill Glastonbury
WhiteHorse);
my $sth = $dbh->prepare('INSERT INTO spiritaxis VALUES(?, ?, ?)');
foreach my $month (@months) {
foreach my $visitors (@monuments) {
$sth->execute($month, 1 * int(rand(2000)), $visitors);
}
}
$sth = $dbh->prepare(
"SELECT BARCHART, IMAGEMAP
FROM spiritaxis
WHERE WIDTH=1000 AND HEIGHT=600 AND
TITLE = 'Visitors Per Saturday' AND
SIGNATURE = 'Copyright(C) 2002, Andy Duncan' AND
X-AXIS = 'Month' AND
Y-AXIS = 'Visitors' AND
Z-AXIS = 'Monument' AND
COLORS=(white) AND
SHOWGRID = 1"
);
$sth->execute;
my $row = $sth->fetchrow_arrayref;
open(BAR, '>/tmp/spiritaxis.png');
binmode BAR;
print BAR $$row[0];
close BAR;
$dbh->do('DROP TABLE spiritaxis');
--snip--
This works like a charm, producing a neat 3D barchart.
Now, if I am replacing the string values composing X-axis with date
datatypes, as in this example:
--snip--
use DBI;
use strict;
my $dbh= DBI->connect('dbi:Chart:', undef, undef, { PrintError => 1,
RaiseError => 1 });
$dbh->do('CREATE TABLE spiritaxis (
Dates date,
Visitors integer,
Monument varchar(11))');
my @dates = qw(2007-01-01 2007-02-01 2007-03-01 2007-04-01 2007-05-01
2007-06-01 2007-07-01 2007-08-01 2007-09-01 2007-10-01 2007-11-01
2007-12-01);
my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my @monuments = qw(Stonehenge Avebury SilburyHill Glastonbury
WhiteHorse);
my $sth = $dbh->prepare('INSERT INTO spiritaxis VALUES(?, ?, ?)');
foreach my $date (@dates) {
foreach my $visitors (@monuments) {
$sth->execute($date, 1 * int(rand(2000)), $visitors);
}
}
$sth = $dbh->prepare(
"SELECT BARCHART, IMAGEMAP
FROM spiritaxis
WHERE WIDTH=1000 AND HEIGHT=600 AND
TITLE = 'Visitors Per Saturday' AND
SIGNATURE = 'Copyright(C) 2002, Andy Duncan' AND
X-AXIS = 'Dates' AND
Y-AXIS = 'Visitors' AND
Z-AXIS = 'Monument' AND
COLORS=(white) AND
SHOWGRID = 1"
);
$sth->execute;
my $row = $sth->fetchrow_arrayref;
open(BAR, '>/tmp/spiritaxis.png');
binmode BAR;
print BAR $$row[0];
close BAR;
$dbh->do('DROP TABLE spiritaxis');
--snip--
Now the graph is produced BUT all bars are not represented correctly
(everything is collapsed on a single graphical area, with all domain
values overlapped). I have a correct behavior if I change datatypes
from date to e.g. varchar(20), but they're no more dates...
Thanks for help & congrats for this great module!
Fred.