--- loncom/xml/lonplot.pm 2007/08/09 06:25:43 1.128 +++ loncom/xml/lonplot.pm 2007/12/05 23:22:18 1.132 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.128 2007/08/09 06:25:43 albertel Exp $ +# $Id: lonplot.pm,v 1.132 2007/12/05 23:22:18 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,11 +36,10 @@ use Apache::response; use Apache::lonxml; use Apache::edit; use Apache::lonnet; -use lib '/home/httpd/lib/perl/'; use LONCAPA; -use vars qw/$weboutputformat $versionstring/; +use vars qw/$weboutputformat $version/; @@ -49,8 +48,9 @@ BEGIN { # # Determine the version of GNUPLOT $weboutputformat = 'gif'; - $versionstring = `gnuplot --version 2>/dev/null`; - if ($versionstring =~ /^gnuplot 4/) { + my $versionstring = `gnuplot --version 2>/dev/null`; + ($version) = ($versionstring =~ /^gnuplot ([\d.]+)/); + if ($version >= 4) { $weboutputformat = 'png'; } @@ -435,7 +435,7 @@ my %tic_defaults = }, ); -my @axis_edit_order = ('color','xmin','xmax','ymin','ymax'); +my @axis_edit_order = ('color','xmin','xmax','ymin','ymax','xformat', 'yformat'); my %axis_defaults = ( color => { @@ -472,7 +472,22 @@ my %axis_defaults = description => 'Maximum y-value shown in plot', edit_type => 'entry', size => '10' - } + }, + xformat => { + default => 'on', + test => sub {$_[0]=~/^(on|off|\d+(f|F|e|E))$/}, + description => 'X-axis number formatting', + edit_type => 'choice', + choices => ['on', 'off', '2e', '2f'], + }, + yformat => { + default => 'on', + test => sub {$_[0]=~/^(on|off|\d+(f|F|e|E))$/}, + description => 'X-axis number formatting', + edit_type => 'choice', + choices => ['on', 'off', '2e', '2f'], + }, + ); my @curve_edit_order = ('color','name','linestyle','linewidth','pointtype','pointsize','limit'); @@ -501,7 +516,7 @@ my %curve_defaults = choices => [keys(%linestyles)] }, linewidth => { - default => 2, + default => 1, test => $int_test, description => 'Line width (may not apply to all line styles)', edit_type => 'choice', @@ -1259,9 +1274,15 @@ sub write_gnuplot_file { if (lc($Apache::lonplot::plot{'bmargin'}) ne 'default') { $gnuplot_input .= 'set bmargin '.$Apache::lonplot::plot{'bmargin'}.$/; } + # tic scales - $gnuplot_input .= 'set ticscale '. - $Apache::lonplot::plot{'major_ticscale'}.' '.$Apache::lonplot::plot{'minor_ticscale'}.$/; + if ($version > 4) { + $gnuplot_input .= 'set tics scale '. + $Apache::lonplot::plot{'major_ticscale'}.', '.$Apache::lonplot::plot{'minor_ticscale'}.$/; + } else { + $gnuplot_input .= 'set ticscale '. + $Apache::lonplot::plot{'major_ticscale'}.' '.$Apache::lonplot::plot{'minor_ticscale'}.$/; + } #boxwidth if (lc($Apache::lonplot::plot{'boxwidth'}) ne '') { $gnuplot_input .= 'set boxwidth '.$Apache::lonplot::plot{'boxwidth'}.$/; @@ -1315,6 +1336,22 @@ sub write_gnuplot_file { } # axis if (%axis) { + if ($axis{'xformat'} ne 'on') { + $gnuplot_input .= "set format x "; + if ($axis{'xformat'} eq 'off') { + $gnuplot_input .= "\"\"\n"; + } else { + $gnuplot_input .= "\"\%.".$axis{'xformat'}."\"\n"; + } + } + if ($axis{'yformat'} ne 'on') { + $gnuplot_input .= "set format y "; + if ($axis{'yformat'} eq 'off') { + $gnuplot_input .= "\"\"\n"; + } else { + $gnuplot_input .= "\"\%.".$axis{'yformat'}."\"\n"; + } + } $gnuplot_input .= "set xrange \[$axis{'xmin'}:$axis{'xmax'}\]\n"; $gnuplot_input .= "set yrange \[$axis{'ymin'}:$axis{'ymax'}\]\n"; } @@ -1355,7 +1392,6 @@ sub write_gnuplot_file { $curve->{'function'}.' title "'. $curve->{'name'}.'" with '. $curve->{'linestyle'}; - $gnuplot_input.= ' linewidth '.$curve->{'linewidth'}; if (($curve->{'linestyle'} eq 'points') || ($curve->{'linestyle'} eq 'linespoints') || @@ -1368,6 +1404,8 @@ sub write_gnuplot_file { } elsif ($curve->{'linestyle'} eq 'filledcurves') { $gnuplot_input.= ' '.$curve->{'limit'}; } + $gnuplot_input.= ' linewidth '.$curve->{'linewidth'}; + } elsif (exists($curve->{'data'})) { # Store data values in $datatext my $datatext = ''; @@ -1391,7 +1429,6 @@ sub write_gnuplot_file { $gnuplot_input.= '"'.$datafilename.'" title "'. $curve->{'name'}.'" with '. $curve->{'linestyle'}; - $gnuplot_input.= ' linewidth '.$curve->{'linewidth'}; if (($curve->{'linestyle'} eq 'points') || ($curve->{'linestyle'} eq 'linespoints') || ($curve->{'linestyle'} eq 'errorbars') || @@ -1403,6 +1440,7 @@ sub write_gnuplot_file { } elsif ($curve->{'linestyle'} eq 'filledcurves') { $gnuplot_input.= ' '.$curve->{'limit'}; } + $gnuplot_input.= ' linewidth '.$curve->{'linewidth'}; } } # Write the output to a file.