small circular points
[MojoFacets.git] / lib / MojoFacets / Gnuplot.pm
index 0fd8b6a..12e8bca 100644 (file)
@@ -7,37 +7,92 @@ use base 'Mojolicious::Controller';
 
 use Data::Dump qw(dump);
 use Digest::MD5 qw(md5_hex);
+use Text::Unaccent::PurePerl;
+use MojoFacets::Data;
 
 sub index {
        my $self = shift;
 
-       my $columns = $self->session('columns') || $self->redirect_to('/data/columns');
+       my $columns = $self->session('columns') || return $self->redirect_to('/data/columns');
+       my $path    = $self->session('path')    || return $self->redirect_to('/data/load');
+       my $with    = $self->param('with') || 'points';
 
-       my $url = '/export/' . $self->session('path') . '/' . join('.', @$columns);
-       my $dir = $self->app->home->rel_dir('public');
+       my $gnuplot_hide = $self->every_param('gnuplot_hide');
+       warn "## gnuplot_hide=",dump( $gnuplot_hide );
+       my $hide_columns;
+       $hide_columns->{$_}++ foreach @$gnuplot_hide;
+       warn "## hide_columns ", dump $hide_columns;
+
+#      my $name = join('.', 'items', map { my $n = unac_string($_); $n =~ s/\W+/_/g; $n } @$columns );
+       my $name = MojoFacets::Data::__export_path_name( $path, 'items', @$columns );
+
+       warn "# name $name\n";
+
+       my $url = "/export/$path/$name";
+       my $dir = $self->app->home->rel_file('public');
 
        if ( -e "$dir/$url" ) {
 
+               my $timefmt = $self->param('timefmt');
+
+               my $timefmt_x = $timefmt;
+               $timefmt_x =~ s/[ T]%H/\\n%H/;
+
+               my $spaces = $timefmt;
+               $spaces =~ s/\S+//g;
+warn "# spaces: [$spaces]",dump( $spaces );
+               $spaces = length( $spaces );
+warn "# spaces: $spaces";
+
                my @plot;
-               push @plot, qq|"$dir/$url" using 1:2 with linespoints|;
+               foreach ( 1 .. $#$columns ) {
+                       my $title = $columns->[$_];
+                       next if $hide_columns->{$title};
+                       $title =~ s/_/ /g;
+                       next if $hide_columns->{ $title };
 
-               open(my $gnuplot, '|-', 'gnuplot') || die "gnuplot $!";
-               print $gnuplot qq|
+                       my $n = $_ + 1 + $spaces;
+                       push @plot, qq|"$dir/$url" using 1:$n notitle with $with lc $_ pt 7 ps 0.5|, # pt 7 - circle, ps 2 - size 2
+                                               qq|NaN lc $_ title "$title" with lines|
+                       ;
+               }
+
+               my $g = qq|
 
-set terminal png
+set terminal png size 1000,400
 set output '$dir/$url.png'
 
+               |;
+
+               if ( $timefmt ) {
+                       $g .= qq|
+
 set xdata time
-set timefmt "%Y-%m-%d"
-#set format x "%d.%m."
-#set format x "%Y-%m-%d"
+set timefmt "$timefmt"
+#set format x "$timefmt"
+set format x "$timefmt_x"
+
+                       |;
+               }
+
 #set xrange [ "2009-01-01":"2010-01-01" ]
 #set yrange [ 0 : ]
 
-plot |, join(',', @plot);
+               $g .= "\n\nplot " . join(',', @plot) . "\n";
+               $g =~ s/\n\n+/\n/sg;
+
+warn "gnuplot $g";
+
+               open(my $gnuplot, '|-', 'gnuplot') || die "gnuplot $!";
+               print $gnuplot $g;
+               close $gnuplot;
 
-               $self->redirect_to( "$url.png" );
-               #$self->render_text( "$url.png" );
+               if ( -e "$dir/$url.png" ) {
+                       warn "redirect $url.png";
+                       return $self->redirect_to( "$url.png" );
+               } else {
+                       $self->render_text( "no $dir/$url.png" );
+               }
        } else {
                $self->render_text("no graph for $url");
        }