[LON-CAPA-cvs] cvs: loncom /xml lonplot.pm

albertel lon-capa-cvs@mail.lon-capa.org
Thu, 09 Jun 2005 02:16:07 -0000


albertel		Wed Jun  8 22:16:07 2005 EDT

  Modified files:              
    /loncom/xml	lonplot.pm 
  Log:
  - adding more configurabilites to <gnuplot> (from Jim Maxka)
  
  
  
Index: loncom/xml/lonplot.pm
diff -u loncom/xml/lonplot.pm:1.109 loncom/xml/lonplot.pm:1.110
--- loncom/xml/lonplot.pm:1.109	Tue Jun  7 18:30:42 2005
+++ loncom/xml/lonplot.pm	Wed Jun  8 22:16:04 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Dynamic plot
 #
-# $Id: lonplot.pm,v 1.109 2005/06/07 22:30:42 foxr Exp $
+# $Id: lonplot.pm,v 1.110 2005/06/09 02:16:04 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -102,6 +102,7 @@
      yerrorbars	    => [3,4],
      xyerrorbars    => [4,6],
      boxes          => 3,
+     filledcurves   => 2,
      vector	    => 4
     );		    
 
@@ -125,7 +126,8 @@
 my @gnuplot_edit_order = 
     qw/alttag bgcolor fgcolor height width font transparent grid samples 
     border align texwidth texfont plotcolor plottype lmargin rmargin tmargin
-    bmargin major_ticscale minor_ticscale/;
+    bmargin major_ticscale minor_ticscale boxwidth gridlayer fillstyle
+    pattern solid/;
 
 my $margin_choices = ['default',0..20];
 
@@ -178,6 +180,19 @@
 	 description => 'Display grid',
 	 edit_type   => 'onoff'
 	 },
+     gridlayer    => {
+	 default     => 'off',
+	 test        => $onoff_test, 
+	 description => 'Display grid front layer over filled boxes or filled curves',
+	 edit_type   => 'onoff'
+	 },
+     box_border   => {
+	 default     => 'noborder',
+	 test        => sub {$_[0]=~/^(noborder|border)$/},
+	 description => 'Draw border for boxes',
+	 edit_type   => 'choice',
+	 choices     => ['border','noborder']
+	 },
      border       => {
 	 default     => 'on',
 	 test        => $onoff_test, 
@@ -191,7 +206,7 @@
 	 edit_type   => 'choice',
 	 choices     => ['small','medium','large']
 	 },
-     samples         => {
+     samples      => {
 	 default     => '100',
 	 test        => $int_test,
 	 description => 'Number of samples for non-data plots',
@@ -212,55 +227,83 @@
          edit_type   => 'entry',
          size        => '5'
          },
-     texfont     => {
+     texfont      => {
          default     => '22',
          test        => $int_test,
          description => 'Font size to use in TeX output (pts):',
          edit_type   => 'choice',
          choices     => [qw/8 10 12 14 16 18 20 22 24 26 28 30 32 34 36/],
          },
-     plotcolor   => {
+     plotcolor    => {
          default     => 'monochrome',
          test        => sub {$_[0]=~/^(monochrome|color|colour)$/},
          description => 'Color setting for printing:',
          edit_type   => 'choice',
          choices     => [qw/monochrome color colour/],
          },
-     plottype  => {
+     pattern      => {
+	 default     => '',
+	 test        => $int_test,
+	 description => 'pattern value for boxes:',
+	 edit_type   => 'choice',
+         choices     => [0,1,2,3,4,5,6]
+         },
+     solid        => {
+         default     => 0,
+         test        => $real_test,
+         description => 'The density of fill style for boxes',
+         edit_type   => 'entry',
+         size        => '5'
+         },
+     fillstyle    => {
+	 default     => 'empty',
+	 test        => sub {$_[0]=~/^(empty|solid|pattern)$/},
+	 description => 'Filled style for boxes:',
+	 edit_type   => 'choice',
+         choices     => ['empty','solid','pattern']
+         },
+     plottype     => {
 	 default     => 'Cartesian',
 	 test        => sub {$_[0]=~/^(Polar|Cartesian)$/},
 	 description => 'Plot type:',
 	 edit_type   => 'choice',
          choices     => ['Cartesian','Polar']
          },
-     lmargin   => {
+     lmargin      => {
 	 default     => 'default',
 	 test        => sub {$_[0]=~/^(default|\d+)$/},
 	 description => 'Left margin width (pts):',
 	 edit_type   => 'choice',
          choices     => $margin_choices,
          },
-     rmargin   => {
+     rmargin      => {
 	 default     => 'default',
 	 test        => sub {$_[0]=~/^(default|\d+)$/},
 	 description => 'Right margin width (pts):',
 	 edit_type   => 'choice',
          choices     => $margin_choices,
          },
-     tmargin   => {
+     tmargin      => {
 	 default     => 'default',
 	 test        => sub {$_[0]=~/^(default|\d+)$/},
 	 description => 'Top margin width (pts):',
 	 edit_type   => 'choice',
          choices     => $margin_choices,
          },
-     bmargin   => {
+     bmargin      => {
 	 default     => 'default',
 	 test        => sub {$_[0]=~/^(default|\d+)$/},
 	 description => 'Bottom margin width (pts):',
 	 edit_type   => 'choice',
          choices     => $margin_choices,
          },
+     boxwidth     => {
+	 default     => '',
+	 test        => $real_test, 
+	 description => 'width of boxes default auto',
+	 edit_type   => 'entry',
+         size        => '5'
+         },
      major_ticscale  => {
          default     => '1',
          test        => $real_test,
@@ -414,7 +457,7 @@
 	 }
      );
 
-my @curve_edit_order = ('color','name','linestyle','pointtype','pointsize');
+my @curve_edit_order = ('color','name','linestyle','pointtype','pointsize','limit');
 
 my %curve_defaults = 
     (
@@ -460,7 +503,14 @@
          description => 'point type (may not apply to all line styles)',
          edit_type   => 'choice',
          choices     => [0,1,2,3,4,5,6]
-         }
+         },
+     limit     => {
+         default     => 'closed',
+	 test        => sub {$_[0]=~/^(closed|x1|x2|y1|y2)$/},
+         description => 'point to fill -- for filledcurves',
+         edit_type   => 'choice',
+         choices     => ['closed','x1','x2','y1','y2']
+         },
      );
 
 ###################################################################
@@ -1065,6 +1115,14 @@
     } else {
         # Assume Cartesian
     }
+    # solid or pattern for boxes?
+    if (lc($Apache::lonplot::plot{'fillstyle'}) eq 'solid') {
+        $gnuplot_input .= 'set style fill solid '.
+	    $Apache::lonplot::plot{'solid'}.$Apache::lonplot::plot{'box_border'}.$/;
+    } elsif (lc($Apache::lonplot::plot{'fillstyle'}) eq 'pattern') {
+        $gnuplot_input .= 'set style fill pattern '.$Apache::lonplot::plot{'pattern'}.$Apache::lonplot::plot{'box_border'}.$/;
+    } elsif (lc($Apache::lonplot::plot{'fillstyle'}) eq 'empty') {
+    }
     # margin
     if (lc($Apache::lonplot::plot{'lmargin'}) ne 'default') {
         $gnuplot_input .= 'set lmargin '.$Apache::lonplot::plot{'lmargin'}.$/;
@@ -1081,6 +1139,14 @@
     # tic scales
     $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'}.$/;
+    }
+    # gridlayer
+    $gnuplot_input .= 'set grid noxtics noytics front '.$/ 
+	if ($Apache::lonplot::plot{'gridlayer'} eq 'on');
+
     # grid
     $gnuplot_input .= 'set grid'.$/ if ($Apache::lonplot::plot{'grid'} eq 'on');
     # border
@@ -1169,6 +1235,8 @@
                 ($curve->{'linestyle'} eq 'xyerrorbars')) {
                 $gnuplot_input.=' pointtype '.$curve->{'pointtype'};
                 $gnuplot_input.=' pointsize '.$curve->{'pointsize'};
+            } elsif ($curve->{'linestyle'} eq 'filledcurves') { 
+                $gnuplot_input.= ' '.$curve->{'limit'};
             }
 	} elsif (exists($curve->{'data'})) {
 	    # Store data values in $datatext
@@ -1202,6 +1270,8 @@
                 ($curve->{'linestyle'} eq 'xyerrorbars')) {
                 $gnuplot_input.=' pointtype '.$curve->{'pointtype'};
                 $gnuplot_input.=' pointsize '.$curve->{'pointsize'};
+            } elsif ($curve->{'linestyle'} eq 'filledcurves') { 
+                $gnuplot_input.= ' '.$curve->{'limit'};
             }
 	}
     }