octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: improved surface: __go_draw_axes__


From: David Bateman
Subject: Re: improved surface: __go_draw_axes__
Date: Wed, 07 Nov 2007 02:59:10 +0100
User-agent: Thunderbird 1.5.0.7 (X11/20060921)

John W. Eaton wrote:
> On  7-Nov-2007, David Bateman wrote:
> 
> | Can we move surfc from octave-forge as well?
> 
> Yes.
> 
> | I'll check against gnuplot
> | 4.0 as I've deliberately kept it installed to check compatibility.
> 
> OK.
> 
> Thanks,
> 
> jwe
> 

Ok, here is a patch that adds a surfc and matlab compatible pie
function, and adds the missing functions the the SOURCES in the Makefile

D.
*** ./scripts/plot/pie.m.orig5  2007-11-07 01:10:56.570971484 +0100
--- ./scripts/plot/pie.m        2007-11-07 01:17:46.516604557 +0100
***************
*** 0 ****
--- 1,150 ----
+ ## Copyright (C) 2007 David Bateman
+ ##
+ ## This file is part of Octave.
+ ##
+ ## Octave is free software; you can redistribute it and/or modify it
+ ## under the terms of the GNU General Public License as published by
+ ## the Free Software Foundation; either version 3 of the License, or (at
+ ## your option) any later version.
+ ##
+ ## Octave is distributed in the hope that it will be useful, but
+ ## WITHOUT ANY WARRANTY; without even the implied warranty of
+ ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ ## General Public License for more details.
+ ##
+ ## You should have received a copy of the GNU General Public License
+ ## along with Octave; see the file COPYING.  If not, see
+ ## <http://www.gnu.org/licenses/>.
+ 
+ ## -*- texinfo -*-
+ ## @deftypefn {Function File} {} pie (@var{y})
+ ## @deftypefnx {Function File} {} pie (@var{y}, @var{explode})
+ ## @deftypefnx {Function File} {} pie (@dots{}, @var{labels})
+ ## @deftypefnx {Function File} {} pie (@var{h}, @dots{});
+ ## @deftypefnx {Function File} address@hidden =} pie (@dots{});
+ ## Produce a pie chart. 
+ ##
+ ## Called with a single vector arrgument, produces a pie chart of the
+ ## elements in @var{x}, with the size of the slice determined by percentage
+ ## size of the values of @var{x}.
+ ##
+ ## The variable @var{explode} is a vector of the same length as @var{x} that
+ ## if non zero 'explodes' the slice from the pie chart.
+ ##
+ ## If given @var{labels} is a cell array of strings of the same length as
+ ## @var{x}, giving the labels of each of the slices of the pie chart. 
+ ##
+ ## The optional return value @var{h} provides a handle to the patch object.
+ ##
+ ## @seealso{bar, stem}
+ ## @end deftypefn
+ 
+ ## Very roughly based on pie.m from octave-forge whose author was
+ ## Daniel Heiserer <address@hidden>
+ 
+ function retval = pie (varargin)
+ 
+   if (nargin < 1)
+     print_usage ();
+   elseif (isscalar (varargin{1}) && ishandle (varargin{1}))
+     h = varargin {1};
+     if (! strcmp (get (h, "type"), "axes"))
+       error ("pie: expecting first argument to be an axes object");
+     endif
+     oldh = gca ();
+     unwind_protect
+       axes (h);
+       newplot ();
+       tmp = __pie__ (h, varargin{2:end});
+     unwind_protect_cleanup
+       axes (oldh);
+     end_unwind_protect
+   else
+     newplot ();
+     tmp = __pie__ (gca (), varargin{:});
+   endif
+ 
+   if (nargout > 0)
+     retval = tmp;
+   endif
+ endfunction
+ 
+ function hlist = __pie__ (varargin)
+   h = varargin{1};
+   x = abs (varargin{2});
+   iarg = 3;
+ 
+   if (! isvector (x))
+     error ("pie: expecting vector argument");
+   endif
+ 
+   len = length (x);
+ 
+   while (iarg <= nargin)
+     arg = varargin {iarg++};
+     if (iscell (arg))
+       labels = arg;
+       if (! size_equal (x, labels))
+       error ("pie: mismatch in number of labels and data");
+       endif
+     elseif (isnumeric (arg))
+       explode = arg;
+       if (! size_equal (x, explode))
+       error ("pie: mismatch in number of elements in explode and data");
+       endif
+     endif
+   endwhile
+ 
+   if (! exist ("explode", "var"))
+     explode = zeros (size (x));
+   endif
+ 
+   if (! exist ("labels", "var"))
+     xp = round (100 * x ./ sum (x)); 
+     for i = 1 : len
+       labels{i} = sprintf ("%d%%", xp(i));
+     endfor
+   endif
+ 
+   hlist = [];
+   refinement = 90;
+   phi = 0 : refinement : 360;
+   xphi = cumsum (x / sum(x) * 360);
+   for i = 1 : len 
+     if (i == 1)
+       xn = 0 : 360 / refinement : xphi(i);
+     else
+       xn = xphi(i-1) : 360 / refinement : xphi(i);
+     endif
+ 
+     if (xn (length (xn)) != xphi(i))
+       xn = [xn, xphi(i)];
+     endif
+ 
+     xn2 = (xn(1) + xn(end)) / 2;
+     if (explode (i))
+       xoff = - 0.1 * sind (xn2);
+       yoff = 0.1 * cosd (xn2);
+     else
+       xoff = 0;
+       yoff = 0;
+     endif
+     xt = - 1.2 * sind (xn2);
+     yt = 1.2 * cosd (xn2);
+     if (xt > 0)
+       align = "left";
+     else
+       align = "right";
+     endif
+ 
+     hlist = [hlist; patch(xoff + [0, - sind(xn)], yoff + [0, cosd(xn)], i);
+            text(xt, yt, labels {i}, "HorizontalAlignment", align)];
+   endfor
+   if (len == 1)
+     set (h, "clim", [1, 2]);
+   else
+     set (h, "clim", [1, len]);
+   endif
+   axis ([-1.5,1.5,-1.5,1.5]);
+ endfunction
+   
*** ./scripts/plot/surfc.m.orig5        2007-11-07 02:57:14.049568570 +0100
--- ./scripts/plot/surfc.m      2007-11-07 02:51:49.725472786 +0100
***************
*** 0 ****
--- 1,74 ----
+ ## Copyright (C) 1996, 1997, 2007 John W. Eaton
+ ##
+ ## This file is part of Octave.
+ ##
+ ## Octave is free software; you can redistribute it and/or modify it
+ ## under the terms of the GNU General Public License as published by
+ ## the Free Software Foundation; either version 3 of the License, or (at
+ ## your option) any later version.
+ ##
+ ## Octave is distributed in the hope that it will be useful, but
+ ## WITHOUT ANY WARRANTY; without even the implied warranty of
+ ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ ## General Public License for more details.
+ ##
+ ## You should have received a copy of the GNU General Public License
+ ## along with Octave; see the file COPYING.  If not, see
+ ## <http://www.gnu.org/licenses/>.
+ 
+ ## -*- texinfo -*-
+ ## @deftypefn {Function File} {} surfc (@var{x}, @var{y}, @var{z})
+ ## Plot a surface and contour given matrices @var{x}, and @var{y} from 
+ ## @code{meshgrid} and a matrix @var{z} corresponding to the @var{x} and 
+ ## @var{y} coordinates of the mesh.  If @var{x} and @var{y} are vectors, 
+ ## then a typical vertex is (@var{x}(j), @var{y}(i), @var{z}(i,j)).  Thus, 
+ ## columns of @var{z} correspond to different @var{x} values and rows of 
+ ## @var{z} correspond to different @var{y} values.
+ ## @seealso{meshgrid, surf, contour}
+ ## @end deftypefn
+ 
+ function h = surfc (varargin)
+ 
+   newplot ();
+ 
+   tmp = surface (varargin{:});
+ 
+   ax = get (tmp, "parent");
+ 
+   set (tmp, "facecolor", "flat");
+ 
+   set (ax, "view", [-37.5, 30]);
+ 
+   hold on;
+ 
+   [c, lev] = contourc (varargin{:});
+ 
+   cmap = get (gcf(), "colormap");
+   
+   levx = linspace (min (lev), max (lev), size (cmap, 1));
+ 
+   drawnow();
+   ax = axis();
+   zmin = 2 * ax(5) - ax(6);
+ 
+   ## decode contourc output format
+   i1 = 1;
+   while (i1 < length (c))
+ 
+     clev = c(1,i1);
+     clen = c(2,i1);
+ 
+     ccr = interp1 (levx, cmap(:,1), clev);
+     ccg = interp1 (levx, cmap(:,2), clev);
+     ccb = interp1 (levx, cmap(:,3), clev);
+ 
+     ii = i1+1:i1+clen;
+     line (c(1,ii), c(2,ii), zmin*ones(size(ii)), "color", [ccr, ccg, ccb]);
+ 
+     i1 += c(2,i1)+1;
+   endwhile
+   
+   if (nargout > 0)
+     h = tmp;
+   endif
+ endfunction
*** ./scripts/plot/Makefile.in.orig5    2007-11-07 01:34:37.576906710 +0100
--- ./scripts/plot/Makefile.in  2007-11-07 02:56:07.252050148 +0100
***************
*** 96,102 ****
--- 96,104 ----
    newplot.m \
    orient.m \
    patch.m \
+   pcolor.m \
    peaks.m \
+   pie.m \
    plot.m \
    plot3.m \
    polar.m \
***************
*** 106,116 ****
--- 108,122 ----
    semilogxerr.m \
    semilogy.m \
    semilogyerr.m \
+   shading.m \
    shg.m \
    sombrero.m \
    stairs.m \
    stem.m \
    subplot.m \
+   surf.m \
+   surface.m \
+   surfc.m \
    text.m \
    title.m \
    view.m \

reply via email to

[Prev in Thread] Current Thread [Next in Thread]