changeset 5727:f0fbefd984f6

[project @ 2006-04-03 18:50:31 by jwe]
author jwe
date Mon, 03 Apr 2006 18:50:31 +0000
parents ac07a73bdbec
children 4ff0cb3e1dd1
files scripts/ChangeLog scripts/plot/grid.m
diffstat 2 files changed, 88 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog	Mon Apr 03 18:44:05 2006 +0000
+++ b/scripts/ChangeLog	Mon Apr 03 18:50:31 2006 +0000
@@ -1,3 +1,8 @@
+2006-04-03  David Bateman  <dbateman@free.fr>
+
+	* plot/grid.m: Cache the state of the grid to allow toggling.
+	Accept keyword "minor" for minor grid.
+
 2006-03-28  John W. Eaton  <jwe@octave.org>
 
 	* general/isscalar.m: Only require that all dimensions are 1 for
--- a/scripts/plot/grid.m	Mon Apr 03 18:44:05 2006 +0000
+++ b/scripts/plot/grid.m	Mon Apr 03 18:50:31 2006 +0000
@@ -19,9 +19,16 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {} grid (@var{arg})
+## @deftypefnx {Function File} {} grid ("minor", @var{arg2})
 ## For two-dimensional plotting, force the display of a grid on the plot.
 ## The argument may be either @code{"on"} or @code{"off"}.  If it is
-## omitted, @code{"on"} is assumed.
+## omitted, the the current grid state is toggled.
+##
+## If @var{arg} is @code{"minor"} then the minor grid is toggled. When
+## using a minor grid a second argument @var{arg2} is allowed, which can
+## be either @code{"on"} or @code{"off"} to explicitly set the state of
+## the minor grid, or alternatively a positive integer specifying the
+## number of minor grid lines.
 ## @seealso{plot, semilogx, semilogy, loglog, polar, mesh, contour,
 ## bar, stairs, replot, xlabel, ylabel, title}
 ## @end deftypefn
@@ -30,22 +37,51 @@
 
 ## PKG_ADD: mark_as_command grid
 
-function grid (x)
+function grid (x, y)
+
+  persistent grid_on = false;
+  persistent minor_on = false;
+  persistent minor_tics = 5;
 
   usage_msg = "grid (\"on\" | \"off\")";
 
   do_replot = false;
 
   if (nargin == 0)
-    __gnuplot_raw__ ("set grid;\n");
+    grid_on = ! grid_on;
+    if (grid_on)
+      __gnuplot_raw__ ("set grid;\n");
+    else
+      __gnuplot_raw__ ("set nogrid;\n");
+    endif
     do_replot = true;
   elseif (nargin == 1)
     if (ischar (x))
       if (strcmp ("off", x))
         __gnuplot_raw__ ("set nogrid;\n");
+	grid_on = false;
 	do_replot = true;
       elseif (strcmp ("on", x))
         __gnuplot_raw__ ("set grid;\n");
+	grid_on = true;
+	do_replot = true;
+      elseif (strcmp ("minor", x))
+	minor_on = ! minor_on;
+	if (minor_on)
+	  cmd = sprintf ("set mxtics %d;\n", minor_tics);
+	  __gnuplot_raw__ (cmd);
+	  cmd = sprintf ("set mytics %d;\n", minor_tics);
+	  __gnuplot_raw__ (cmd);
+          __gnuplot_raw__ ("set grid xtics mxtics ytics mxtics;\n");
+	  minor_on = true;
+	else
+	  if (grid_on)
+            __gnuplot_raw__ ("set grid xtics nomxtics ytics nomxtics;\n");
+	  else
+	    __gnuplot_raw__ ("set grid noxtics nomxtics noytics nomxtics;\n");
+	  endif
+	  minor_on = false;
+	endif
 	do_replot = true;
       else
 	usage (usage_msg);
@@ -53,9 +89,52 @@
     else
       error ("grid: argument must be a string");
     endif
+  elseif (nargin == 2)
+    if (ischar (x))
+      if (strcmp ("minor", x))
+	d = str2num (y);
+	if (isempty (d))
+	  if (strcmp ("off", y))
+	    if (grid_on)
+              __gnuplot_raw__ ("set grid xtics nomxtics ytics nomxtics;\n");
+	    else
+	      __gnuplot_raw__ ("set grid noxtics nomxtics noytics nomxtics;\n");
+	    endif
+	    minor_on = false;
+	  elseif (strcmp ("on", y))
+	    cmd = sprintf ("set mxtics %d;\n", minor_tics);
+	    __gnuplot_raw__ (cmd);
+	    cmd = sprintf ("set mytics %d;\n", minor_tics);
+	    __gnuplot_raw__ (cmd);
+            __gnuplot_raw__ ("set grid xtics mxtics ytics mxtics;\n");
+	    minor_on = true;
+	  else
+	    usage (usage_msg);
+	  endif
+	  do_replot = true;
+	else
+	  if (isscalar(d) && ! isnan (d) && ! isinf (d))
+	    minor_tics = max (floor (d), 0);
+	    cmd = sprintf ("set mxtics %d;\n", minor_tics);
+	    __gnuplot_raw__ (cmd);
+	    cmd = sprintf("set mytics %d;\n", minor_tics);
+	    __gnuplot_raw__ (cmd);
+            __gnuplot_raw__ ("set grid xtics mxtics ytics mxtics;\n");
+	    minor_on = true;
+	    do_replot = true;
+	  else
+	    usage (usage_msg);
+	  endif
+	endif
+      else
+	usage (usage_msg);
+      endif
+    else
+      usage (usage_msg);
+    endif    
   else
     usage (usage_msg);
-  endif
+  endif    
 
   if (do_replot && automatic_replot)
     replot ();