# HG changeset patch # User jwe # Date 1194904448 0 # Node ID d4d8c7b33e167d7bdf25ee0bbc90be87f67c03cc # Parent f2ba4aa9a5f9f8710bd1d7966e1b2687154804b1 [project @ 2007-11-12 21:54:07 by jwe] diff --git a/scripts/ChangeLog b/scripts/ChangeLog --- a/scripts/ChangeLog +++ b/scripts/ChangeLog @@ -1,3 +1,13 @@ +2007-11-12 Kai Habel + + * plot/spinmap.m, plot/ribbon.m: New functions. + * plot/Makefile.in (SOURCES): Add them to the list. + +2007-11-12 John W. Eaton + + * plot/__go_draw_axes__.m (get_fontname_and_size): New subfunction. + Use it to avoid duplicated code. + 2007-11-12 David Bateman * plot/title.m: Fix return value for nargout > 0. diff --git a/scripts/plot/Makefile.in b/scripts/plot/Makefile.in --- 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 \ diff --git a/scripts/plot/__go_draw_axes__.m b/scripts/plot/__go_draw_axes__.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 diff --git a/scripts/plot/ribbon.m b/scripts/plot/ribbon.m 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 + +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 diff --git a/scripts/plot/spinmap.m b/scripts/plot/spinmap.m 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 + +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