--- loncom/xml/lonplot.pm 2004/05/26 19:44:20 1.96 +++ loncom/xml/lonplot.pm 2004/08/30 15:23:23 1.101 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.96 2004/05/26 19:44:20 matthew Exp $ +# $Id: lonplot.pm,v 1.101 2004/08/30 15:23:23 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,8 +36,17 @@ use Apache::response; use Apache::lonxml; use Apache::edit; +use vars qw/$weboutputformat $versionstring/; + BEGIN { - &Apache::lonxml::register('Apache::lonplot',('gnuplot')); + &Apache::lonxml::register('Apache::lonplot',('gnuplot')); + # + # Determine the version of GNUPLOT + $weboutputformat = 'gif'; + $versionstring = `gnuplot --version 2>/dev/null`; + if ($versionstring =~ /^gnuplot 4/) { + $weboutputformat = 'png'; + } } ## @@ -110,7 +119,11 @@ my $words_test = sub {$_[0]=~s/\s+/ ################################################################### my @gnuplot_edit_order = qw/alttag bgcolor fgcolor height width font transparent grid samples - border align texwidth texfont plottype/; + border align texwidth texfont plottype lmargin rmargin tmargin bmargin + major_ticscale minor_ticscale/; + +my $margin_choices = ['default', + qw{0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20}]; my %gnuplot_defaults = ( @@ -209,6 +222,48 @@ my %gnuplot_defaults = edit_type => 'choice', choices => ['Cartesian','Polar'] }, + lmargin => { + default => 'default', + test => sub {$_[0]=~/^(default|\d+)$/}, + description => 'Left margin width (pts):', + edit_type => 'choice', + choices => $margin_choices, + }, + rmargin => { + default => 'default', + test => sub {$_[0]=~/^(default|\d+)$/}, + description => 'Right margin width (pts):', + edit_type => 'choice', + choices => $margin_choices, + }, + tmargin => { + default => 'default', + test => sub {$_[0]=~/^(default|\d+)$/}, + description => 'Top margin width (pts):', + edit_type => 'choice', + choices => $margin_choices, + }, + bmargin => { + default => 'default', + test => sub {$_[0]=~/^(default|\d+)$/}, + description => 'Bottm margin width (pts):', + edit_type => 'choice', + choices => $margin_choices, + }, + major_ticscale => { + default => '1', + test => $real_test, + description => 'Size of major tic marks (plot coordinates)', + edit_type => 'entry', + size => '5' + }, + minor_ticscale => { + default => '0.5', + test => $real_test, + description => 'Size of minor tic mark (plot coordinates)', + edit_type => 'entry', + size => '5' + }, ); my %key_defaults = @@ -302,7 +357,7 @@ my %tic_defaults = minorfreq => { default => '0', test => $int_test, - description => 'Number of minor tics between major tic marks', + description => 'Number of minor tics per major tic mark', edit_type => 'entry', size => '10' }, @@ -460,7 +515,7 @@ sub end_gnuplot { ## return image tag for the plot if ($target eq 'web') { $result .= <<"ENDIMAGE"; -{'function'})) { + if ($curve->{'function'} !~ /^\s*$/) { + push(@curvescopy,$curve); + } + } elsif (exists($curve->{'data'})) { + foreach my $data (@{$curve->{'data'}}) { + if (scalar(@$data) > 0) { + push(@curvescopy,$curve); + last; + } + } + } + } + @curves = @curvescopy; # Collect all the colors my @Colors; push @Colors, $plot{'bgcolor'}; @@ -975,6 +1048,22 @@ sub write_gnuplot_file { } else { # Assume Cartesian } + # margin + if (lc($plot{'lmargin'}) ne 'default') { + $gnuplot_input .= 'set lmargin '.$plot{'lmargin'}.$/; + } + if (lc($plot{'rmargin'}) ne 'default') { + $gnuplot_input .= 'set rmargin '.$plot{'rmargin'}.$/; + } + if (lc($plot{'tmargin'}) ne 'default') { + $gnuplot_input .= 'set tmargin '.$plot{'tmargin'}.$/; + } + if (lc($plot{'bmargin'}) ne 'default') { + $gnuplot_input .= 'set bmargin '.$plot{'bmargin'}.$/; + } + # tic scales + $gnuplot_input .= 'set ticscale '. + $plot{'major_ticscale'}.' '.$plot{'minor_ticscale'}.$/; # grid $gnuplot_input .= 'set grid'.$/ if ($plot{'grid'} eq 'on'); # border