diff scripts/plot/__go_draw_axes__.m @ 7222:dd8b3bbeeaf9

[project @ 2007-11-30 06:23:25 by jwe]
author jwe
date Fri, 30 Nov 2007 06:23:26 +0000
parents 66081694ffb8
children 868101dc4404
line wrap: on
line diff
--- a/scripts/plot/__go_draw_axes__.m	Thu Nov 29 23:27:32 2007 +0000
+++ b/scripts/plot/__go_draw_axes__.m	Fri Nov 30 06:23:26 2007 +0000
@@ -247,29 +247,13 @@
     is_image_data = [];
     hidden_removal = NaN;
 
-    xminp = yminp = zminp = cminp = Inf;
-    xmax = ymax = zmax = cmax = -Inf;
-    xmin = ymin = zmin = cmin = Inf;
+    xlim = axis_obj.xlim
+    ylim = axis_obj.ylim
+    zlim = axis_obj.zlim
+    clim = axis_obj.clim
 
-    ## This has to be done here as some of the code below depends on the
-    ## final clim.
-    if (cautoscale)
-      for i = 1:length (kids)
-	obj = get (kids(i));
-	if (isfield (obj, "cdata"))
-	  cdat = obj.cdata(:);
-	  [cmin, cmax, cminp] = get_data_limits (cmin, cmax, cminp, cdat);
-	endif
-      endfor
-      if (cmin == cmax)
-	cmax = cmin + 1;
-      endif      
-      clim = [cmin, cmax];
-    else
-      clim = axis_obj.clim;
-      if (clim(1) == clim(2))
-	clim = [clim(1), clim(1) + 1];
-      endif
+    if (! cautoscale && clim(1) == clim(2))
+      clim(2)++;
     endif
 
     [view_cmd, view_fcn, view_zoom] = image_viewer ();
@@ -318,22 +302,6 @@
 	    x_origin = min (img_xdata);
 	    y_origin = min (img_ydata);
 
-	    if (nd == 2)
-	      if (xautoscale)
-		xmin = min (xmin, min (img_xdata) - dx/2);
-		xmax = max (xmax, max (img_xdata) + dx/2);
-		xminp = min (xminp, min (img_xdata((img_xdata - dx/2)>0)) - dx/2);
-	      endif
-	      if (yautoscale)
-		ymin = min (ymin, min (img_ydata) - dy/2);
-		ymax = max (ymax, max (img_ydata) + dy/2);
-		yminp = min (yminp, min (img_ydata((img_ydata - dy/2)>0)) - dy/2);
-	      endif
-	    else
-	      ## Can have images in 3D, but the image routines don't seem
-	      ## to have a means of arbitrary projection.
-	    endif
-
 	    if (ndims (img_data) == 3)
 	      data{data_idx} = permute (img_data, [3, 1, 2])(:);
 	      format = "1:2:3";
@@ -385,15 +353,6 @@
 	    ydat = obj.ydata(:);
 	    zdat = obj.zdata(:);
 
-	    if (xautoscale)
-	      [xmin, xmax, xminp] = get_data_limits (xmin, xmax, xminp, xdat);
-	    endif
-	    if (yautoscale)
-	      [ymin, ymax, yminp] = get_data_limits (ymin, ymax, yminp, ydat);
-	    endif
-	    if (zautoscale)
-	      [zmin, zmax, zminp] = get_data_limits (zmin, zmax, zminp, zdat);
-	    endif
 	    data{data_idx} = [xdat, ydat, zdat]';
 	    usingclause{data_idx} = "using ($1):($2):($3)";
 	    fputs (plot_stream, "set parametric;\n");
@@ -449,49 +408,19 @@
 		else
 		  xhi = xdat+xudat;
 		endif
-		if (xautoscale)
-		  tx = [xdat; xlo; xhi];
-		  [xmin, xmax, xminp] = get_data_limits (xmin, xmax, xminp, tx);
-		endif
 		data{data_idx} = [xdat, ydat, xlo, xhi, ylo, yhi]';
 		usingclause{data_idx} = "using ($1):($2):($3):($4):($5):($6)";
 		withclause{data_idx} = "with xyerrorbars";
 	      else
-		if (xautoscale)
-		  [xmin, xmax, xminp] = get_data_limits (xmin, xmax, xminp, xdat);
-		endif
 		data{data_idx} = [xdat, ydat, ylo, yhi]';
 		usingclause{data_idx} = "using ($1):($2):($3):($4)";
 		withclause{data_idx} = "with yerrorbars";
 	      endif
 	    elseif (xerr)
-	      if (isempty (xldat))
-		xlo = xdat;
-	      else
-		xlo = xdat-xldat;
-	      endif
-	      if (isempty (xudat))
-		xhi = xdat;
-	      else
-		xhi = xdat+xudat;
-	      endif
-	      if (xautoscale)
-		tx = [xdat; xlo; xhi];
-		[xmin, xmax, xminp] = get_data_limits (xmin, xmax, xminp, tx);
-	      endif
-	      if (yautoscale)
-		[ymin, ymax, yminp] = get_data_limits (ymin, ymax, yminp, ydat);
-	      endif
 	      data{data_idx} = [xdat, ydat, xlo, xhi]';
 	      usingclause{data_idx} = "using ($1):($2):($3):($4)";
 	      withclause{data_idx} = "with xerrorbars";
 	    else
-	      if (xautoscale)
-		[xmin, xmax, xminp] = get_data_limits (xmin, xmax, xminp, xdat);
-	      endif
-	      if (yautoscale)
-		[ymin, ymax, yminp] = get_data_limits (ymin, ymax, yminp, ydat);
-	      endif
 	      data{data_idx} = [xdat, ydat]';
 	      usingclause{data_idx} = sprintf ("using ($1):($2) axes %s%s",
 					      xaxisloc_using, yaxisloc_using);
@@ -525,18 +454,6 @@
 	     zcol = [];
 	   endif
 
-	   if (xautoscale)
-             [xmin, xmax, xminp] = get_data_limits (xmin, xmax, xminp, xcol);
-	   endif
-	   if (yautoscale)
-	     [ymin, ymax, yminp] = get_data_limits (ymin, ymax, yminp, ycol);
-	   endif
-	   if (! isempty (obj.zdata) && ! strncmp(obj.edgecolor, "none", 4))
-	     if (zautoscale)
-	       [zmin, zmax, zminp] = get_data_limits (zmin, zmax, zminp, zcol);
-	     endif
-	   endif
-
 	   if (! isnan (xcol) && ! isnan (ycol))
 	     ## Is the patch closed or not
 	     if (strncmp (obj.facecolor, "none", 4)) 
@@ -871,19 +788,6 @@
 	    zdat = obj.zdata;
 	    cdat = obj.cdata;
 
-	    if (xautoscale)
-	      tx = xdat(:);
-	      [xmin, xmax, xminp] = get_data_limits (xmin, xmax, xminp, tx);
-	    endif
-	    if (yautoscale)
-	      ty = ydat(:);
-	      [ymin, ymax, yminp] = get_data_limits (ymin, ymax, yminp, ty);
-	    endif
-	    if (zautoscale)
-	      tz = zdat(:);
-	      [zmin, zmax, zminp] = get_data_limits (zmin, zmax, zminp, tz);
-	    endif
-
   	    err = false;
             if (! size_equal(zdat, cdat))
               err = true;
@@ -1053,14 +957,8 @@
 
     have_data = (! (isempty (data) || any (cellfun (@isempty, data))));
 
-    if (xautoscale && have_data)
-      xlim = get_axis_limits (xmin, xmax, xminp, xlogscale);
-      if (isempty (xlim))
-	return;
-      endif
-      set (h, "xlim", xlim, "xlimmode", "auto");
-    else
-      xlim = axis_obj.xlim;
+    if (isempty (xlim))
+      return;
     endif
     if (strcmpi (axis_obj.xdir, "reverse"))
       xdir = "reverse";
@@ -1070,14 +968,8 @@
     fprintf (plot_stream, "set %srange [%.15e:%.15e] %s;\n",
 	     xaxisloc, xlim, xdir);
 
-    if (yautoscale && have_data)
-      ylim = get_axis_limits (ymin, ymax, yminp, ylogscale);
-      if (isempty (ylim))
-	return;
-      endif
-      set (h, "ylim", ylim, "ylimmode", "auto");
-    else
-      ylim = axis_obj.ylim;
+    if (isempty (ylim))
+      return;
     endif
     if (strcmpi (axis_obj.ydir, "reverse"))
       ydir = "reverse";
@@ -1088,14 +980,8 @@
 	     yaxisloc, ylim, ydir);
 
     if (nd == 3)
-      if (zautoscale && have_data)
-	zlim = get_axis_limits (zmin, zmax, zminp, zlogscale);
-	if (isempty (zlim))
-	  return;
-	endif
-	set (h, "zlim", zlim, "zlimmode", "auto");
-      else
-	zlim = axis_obj.zlim;
+      if (isempty (zlim))
+	return;
       endif
       if (strcmpi (axis_obj.zdir, "reverse"))
 	zdir = "reverse";
@@ -1105,9 +991,6 @@
       fprintf (plot_stream, "set zrange [%.15e:%.15e] %s;\n", zlim, zdir);
     endif
 
-    if (cautoscale && have_data)
-      set (h, "clim", clim, "climmode", "auto");
-    endif
     if (! any (isinf (clim)))
       fprintf (plot_stream, "set cbrange [%g:%g];\n", clim);
     endif
@@ -1276,62 +1159,6 @@
 
 endfunction
 
-function [xmin, xmax, xminp] = get_data_limits (xmin, xmax, xminp, xdat)
-  if (! isempty (xdat))
-    xdat = xdat(! isinf (xdat));
-    xmin = min (xmin, min (xdat));
-    xmax = max (xmax, max (xdat));
-    tmp = min (xdat(xdat > 0));
-    if (! isempty (tmp))
-      xminp = min (xminp, tmp);
-    endif
-  endif
-endfunction
-
-## Attempt to make "nice" limits from the actual max and min of the
-## data.  For log plots, we will also use the smallest strictly positive
-## value.
-
-function lim = get_axis_limits (min_val, max_val, min_pos, logscale)
-
-  if (! (isinf (min_val) || isinf (max_val)))
-    if (logscale)
-      if (isinf (min_pos))
-	lim = [];
-	warning ("axis: logscale with no positive values to plot");
-	return;
-      endif
-      if (min_val <= 0)
-	warning ("axis: omitting nonpositive data in log plot");
-	min_val = min_pos;
-      endif
-      ## FIXME -- maybe this test should also be relative?
-      if (abs (min_val - max_val) < sqrt (eps))
-	min_val *= 0.9;
-	max_val *= 1.1;
-      endif
-      min_val = 10 ^ floor (log10 (min_val));
-      max_val = 10 ^ ceil (log10 (max_val));
-    else
-      if (min_val == 0 && max_val == 0)
-	min_val = -1;
-	max_val = 1;
-      ## FIXME -- maybe this test should also be relative?
-      elseif (abs (min_val - max_val) < sqrt (eps))
-	min_val -= 0.1 * abs (min_val);
-	max_val += 0.1 * abs (max_val);
-      endif
-      ## FIXME -- to do a better job, we should consider the tic spacing.
-      scale = 10 ^ floor (log10 (max_val - min_val) - 1);
-      min_val = scale * floor (min_val / scale);
-      max_val = scale * ceil (max_val / scale);
-    endif
-  endif
-
-  lim = [min_val, max_val];
-
-endfunction
-
 function [style, typ, with] = do_linestyle_command (obj, idx, plot_stream)
 
   persistent have_newer_gnuplot ...