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

Hi Monks, I am trying to display certain data fetched from database (using Select from a SQL Server DB) in a graph. I tried to achieve the same using GD::Graph with normal sample data (not from database though), but not sure how I can make it using the data from Database. Can someone help? Also, I want to use 2 vertical axis on a single horizontal axis on either side with different values and if one uses histograms, the other should use lines (Seems messy, but that's ok for me).
  • Comment on Data to fetch from Database to display in graph

Replies are listed 'Best First'.
Re: Data to fetch from Database to display in graph
by choroba (Cardinal) on Feb 22, 2018 at 17:01 UTC
    I usually use gnuplot directly to draw graphs.
    #!/usr/bin/perl use warnings; use strict; use DBI; my $filename = '1.dat'; my $graph = '1.png'; # Fake the database. my $db = 'DBI'->connect('dbi:SQLite:dbname=:memory:', "", ""); $db->do('CREATE TABLE goods (id INTEGER, price DECIMAL(5,2), quantity +INTEGER)'); my $populate = $db->prepare('INSERT INTO goods (id, price, quantity) V +ALUES (?, ?, ?)'); $populate->execute(@$_) for [ 1, 10, 100 ], [ 2, 2.5, 150 ], [ 3, 12.2, 25 ]; # Extract the ranges. my $get_maxq = $db->prepare('SELECT MAX(quantity), MAX(price) FROM goo +ds'); $get_maxq->execute; my ($maxq, $maxp) = $get_maxq->fetchrow_array; # Populate the input file. open my $data, '>', $filename or die $!; my $extract = $db->prepare('SELECT price, quantity FROM goods'); $extract->execute; while (my @row = $extract->fetchrow_array) { print {$data} "@row\n" } close $data; # Draw the graph. open my $gp, '|-', 'gnuplot' or die $!; print {$gp} << "__GP__"; set term png; set output '$graph'; set yrange [0:$maxq * 1.1]; set y2range [0:$maxp * 1.1]; set ytics nomirror; set y2tics 0, 2.5; set xtics 0, 1 out; set key out; plot '$filename' using 0:(\$1 * $maxq / $maxp):(.9) with boxes \\ fillstyle transparent solid .1 title 'histogram',\\ '' using 0:2 with lines fillcolor 2 title 'lines'; __GP__ close $gp; unlink $filename;
    ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
Re: Data to fetch from Database to display in graph
by stevieb (Canon) on Feb 22, 2018 at 15:05 UTC

    Please show us the code you currently have, along with a snippet of your input data.

    The source of data doesn't matter; it is after all just that... data.

    Show us the code that works with your example data sample, then also include a small example of the data after you've fetched it from the database (along with the code where you do fetch it from the db).