changeset 7163:d4d8c7b33e16

[project @ 2007-11-12 21:54:07 by jwe]
author jwe
date Mon, 12 Nov 2007 21:54:08 +0000
parents f2ba4aa9a5f9
children 2b5e6c0a9df9
files scripts/ChangeLog scripts/plot/Makefile.in scripts/plot/__go_draw_axes__.m scripts/plot/ribbon.m scripts/plot/spinmap.m
diffstat 5 files changed, 166 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/ChangeLog
+++ b/scripts/ChangeLog
@@ -1,3 +1,13 @@
+2007-11-12  Kai Habel  <kai.habel@gmx.de>
+
+	* plot/spinmap.m, plot/ribbon.m: New functions.
+	* plot/Makefile.in (SOURCES): Add them to the list.
+
+2007-11-12  John W. Eaton  <jwe@octave.org>
+
+	* plot/__go_draw_axes__.m (get_fontname_and_size): New subfunction.
+	Use it to avoid duplicated code.
+
 2007-11-12  David Bateman  <dbateman@free.fr>
 
 	* plot/title.m: Fix return value for nargout > 0.
--- a/scripts/plot/Makefile.in
+++ b/scripts/plot/Makefile.in
@@ -108,6 +108,7 @@
   print.m \
   quiver.m \
   replot.m \
+  ribbon.m \
   semilogx.m \
   semilogxerr.m \
   semilogy.m \
@@ -115,6 +116,7 @@
   shading.m \
   shg.m \
   sombrero.m \
+  spinmap.m \
   stairs.m \
   stem.m \
   subplot.m \
--- a/scripts/plot/__go_draw_axes__.m
+++ b/scripts/plot/__go_draw_axes__.m
@@ -59,16 +59,7 @@
       if (isempty (t.string))
 	fputs (plot_stream, "unset title;\n");
       else
-	if (isempty (t.fontname))
-	  f = "Helvetica";
-	else
-	  f = t.fontname;
-	endif
-	if (isempty (t.fontsize))
-	  s = 10;
-	else
-	  s = t.fontsize;
-	endif
+	[f, s] = get_fontname_and_size (t);
 	fprintf (plot_stream, "set title \"%s\" font \"%s,%d\";\n",
 		 undo_string_escapes (t.string), f, s);
       endif
@@ -80,16 +71,7 @@
       if (isempty (t.string))
 	fputs (plot_stream, "unset xlabel;\n");
       else
-	if (isempty (t.fontname))
-	  f = "Helvetica";
-	else
-	  f = t.fontname;
-	endif
-	if (isempty (t.fontsize))
-	  s = 10;
-	else
-	  s = t.fontsize;
-	endif
+	[f, s] = get_fontname_and_size (t);
 	fprintf (plot_stream, "set xlabel \"%s\" font \"%s,%d\"",
 		 undo_string_escapes (t.string), f, s);
 	if (have_newer_gnuplot)
@@ -107,16 +89,7 @@
       if (isempty (t.string))
 	fputs (plot_stream, "unset ylabel;\n");
       else
-	if (isempty (t.fontname))
-	  f = "Helvetica";
-	else
-	  f = t.fontname;
-	endif
-	if (isempty (t.fontsize))
-	  s = 10;
-	else
-	  s = t.fontsize;
-	endif
+	[f, s] = get_fontname_and_size (t);
 	fprintf (plot_stream, "set ylabel \"%s\" font \"%s,%d\"",
 		 undo_string_escapes (t.string), f, s);
 	if (have_newer_gnuplot)
@@ -852,16 +825,7 @@
 	    endif
 	  endif
 
-	  if (isempty (obj.fontname))
-	    f = "Helvetica";
-	  else
-	    f = obj.fontname;
-	  endif
-	  if (isempty (obj.fontsize))
-	    s = 10;
-	  else
-	    s = obj.fontsize;
-	  endif
+	  [f, s] = get_fontname_and_size (obj);
 
 	  if (nd == 3)
 	    fprintf (plot_stream,
@@ -1413,3 +1377,16 @@
     fprintf (plot_stream, "set %stics;\n", ax);
   endif
 endfunction
+
+function [f, s] = get_fontname_and_size (t)
+  if (isempty (t.fontname))
+    f = "Helvetica";
+  else
+    f = t.fontname;
+  endif
+  if (isempty (t.fontsize))
+    s = 10;
+  else
+    s = t.fontsize;
+  endif
+endfunction
new file mode 100644
--- /dev/null
+++ b/scripts/plot/ribbon.m
@@ -0,0 +1,84 @@
+## Copyright (C) 2007 Kai Habel
+##
+## This program 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 2, or (at your option)
+## any later version.
+##
+## OctPlot 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 OctPlot; see the file COPYING.  If not, write to the Free
+## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+## 02111-1307, USA.
+
+## -*- texinfo -*-
+## @deftypefn {Function File}  ribbon (@var{X}, @var{Y}, @var{WIDTH})
+## @deftypefnx {Function File}  ribbon (@var{X}, @var{Y})
+## @deftypefnx {Function File}  ribbon (@var{Y})
+## @deftypefnx {Function File}  @var{h} = ribbon (...)
+## Plots ribbon plot for the columns of @var{Y} vs. @var{X}. The optional 
+## parameter @var{WIDTH} specifies the width of a single ribbon (default is 0.75).
+## If @var{X} is omitted, a vector containing the row numbers is assumed (1:rows(Y)).
+## If requested a vector @var{h} of the handles to the surface objects is returned.
+## @end deftypefn
+## @seealso{gca, colorbar}
+
+## Author: Kai Habel <kai.habel at gmx.de>
+
+function h = ribbon(X, Y, W)
+
+  newplot ();
+
+  if (nargin == 1)
+    Y = X;
+    if (isvector(Y))
+      Y = Y(:);
+    endif
+    [nr, nc] = size(Y);
+    X = repmat((1 : nr)', 1, nc);
+    W = 0.75;
+  elseif (nargin == 2)
+    W = 0.75;
+  elseif (nargin == 3)
+  else
+    print_usage();
+  end
+
+  if (isvector(X) && isvector(Y))
+    if (length(X) != length(Y))
+      error("In case of vectors, X and Y must have same length")
+    else
+      [X, Y] = meshgrid(X, Y);
+    endif
+  else
+    if (!all(size(X) == size(Y)))
+      error("In case of matrices, X and Y must have same size")
+    endif
+  endif
+
+  [nr,nc] = size(Y);
+  tmp = zeros(1,nc);
+
+  for c = nc:-1:1
+    ZZ = [Y(:,c) Y(:,c)];
+    y = X(:,c);
+    x = [c - W / 2, c + W / 2];
+    [XX,YY] = meshgrid(x,y);
+    CC = ones(size(ZZ))*c;
+    tmp(c) = surface(XX,YY,ZZ,CC);
+  endfor
+
+  ax = get (tmp(c), "parent");
+
+  if (!ishold ())
+    set (ax, "view", [-37.5, 30], "box","off","xgrid","on","ygrid","on","zgrid","on");
+  endif
+
+  if (nargout > 0)
+    h = tmp;
+  endif
+end
new file mode 100644
--- /dev/null
+++ b/scripts/plot/spinmap.m
@@ -0,0 +1,53 @@
+## Copyright (C) 2007 Kai Habel
+##
+## This program 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 2, or (at your option)
+## any later version.
+##
+## OctPlot 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 OctPlot; see the file COPYING.  If not, write to the Free
+## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+## 02111-1307, USA.
+
+## -*- texinfo -*-
+## @deftypefn {Function File}  spinmap (@var{T}, @var{inc})
+## @deftypefnx {Function File}  spinmap (@var{T})
+## @deftypefnx {Function File}  spinmap ()
+## Cycles the colormap for @var{T} seconds with an increment
+## of @var{inc}. Both parameter are optional. In that case 5s and an increment 
+## of 2 is taken.
+## A higher @var{inc} causes a faster cycle through the colormap.
+## @end deftypefn
+## @seealso{gca, colorbar}
+
+## Author: Kai Habel <kai.habel at gmx.de>
+
+function spinmap(T, inc)
+
+  if (nargin == 0)
+    inc = 2;
+    T = 5;
+  elseif (nargin == 1)
+    inc = 2;
+  endif
+
+  cmap = get(gcf,"Colormap");
+  clen = rows(cmap);
+
+  t0 = clock;
+
+  while (etime(clock, t0) < T)
+    for n = 1 : inc : clen
+      newmap = shift(cmap, n, 1);
+      set(gcf,"Colormap",newmap)
+      drawnow
+    endfor
+  end
+  set(gcf,"Colormap",cmap)
+end