[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 \
- improved surface: __go_draw_axes__, Kai Habel, 2007/11/04
- improved surface: __go_draw_axes__, John W. Eaton, 2007/11/04
- Re: improved surface: __go_draw_axes__, Kai Habel, 2007/11/05
- Re: improved surface: __go_draw_axes__, Kai Habel, 2007/11/05
- Re: improved surface: __go_draw_axes__, John W. Eaton, 2007/11/06
- Re: improved surface: __go_draw_axes__, David Bateman, 2007/11/06
- Re: improved surface: __go_draw_axes__, John W. Eaton, 2007/11/06
- Re: improved surface: __go_draw_axes__,
David Bateman <=
- Re: improved surface: __go_draw_axes__, John W. Eaton, 2007/11/07
- Re: improved surface: __go_draw_axes__, David Bateman, 2007/11/07
- Re: improved surface: __go_draw_axes__, David Bateman, 2007/11/06
- Re: improved surface: __go_draw_axes__, David Bateman, 2007/11/06
- Re: improved surface: __go_draw_axes__, David Bateman, 2007/11/06
- Re: improved surface: __go_draw_axes__, John W. Eaton, 2007/11/07
- Re: improved surface: __go_draw_axes__, David Bateman, 2007/11/07
- Re: improved surface: __go_draw_axes__, John W. Eaton, 2007/11/07
- Re: improved surface: __go_draw_axes__, John W. Eaton, 2007/11/07