draw multiple columns on gnuplot
[MojoFacets.git] / lib / MojoFacets / Gnuplot.pm
1 package MojoFacets::Gnuplot;
2
3 use warnings;
4 use strict;
5
6 use base 'Mojolicious::Controller';
7
8 use Data::Dump qw(dump);
9 use Digest::MD5 qw(md5_hex);
10
11 sub index {
12         my $self = shift;
13
14         my $columns = $self->session('columns') || $self->redirect_to('/data/columns');
15
16         my $url = '/export/' . $self->session('path') . '/' . join('.', @$columns);
17         my $dir = $self->app->home->rel_dir('public');
18
19         if ( -e "$dir/$url" ) {
20
21                 my @plot;
22                 foreach ( 1 .. $#$columns ) {
23                         my $n = $_ + 1;
24                         push @plot, qq|"$dir/$url" using 1:$n title "$columns->[$_]" with linespoints|;
25                 }
26
27                 my $g = qq|
28
29 set terminal png
30 set output '$dir/$url.png'
31
32 set xdata time
33 set timefmt "%Y-%m-%d"
34 #set format x "%d.%m."
35 #set format x "%Y-%m-%d"
36 #set xrange [ "2009-01-01":"2010-01-01" ]
37 #set yrange [ 0 : ]
38
39 plot | . join(',', @plot) . "\n";
40
41 warn "gnuplot $g";
42
43                 open(my $gnuplot, '|-', 'gnuplot') || die "gnuplot $!";
44                 print $gnuplot $g;
45                 close $gnuplot;
46
47                 $self->redirect_to( "$url.png" );
48                 #$self->render_text( "$url.png" );
49         } else {
50                 $self->render_text("no graph for $url");
51         }
52 }
53
54 1;