[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scripts to use multiplot extensions
From: |
Vinayak Dutt |
Subject: |
scripts to use multiplot extensions |
Date: |
Tue, 4 Apr 95 08:01:57 CDT |
Here are a bunch of octave scripts for using the multiplot
patched gnuplot extensions. Hope others will find them useful
too.
the functions are:
mplot: a multiplot version of plot() command, automatically
moves to nect plot position after drawing a given
subplot.
multiplot: sets gnuplot in multiple plot mode
oneplot: sets gnuplot in single plot mode
plot_border: sets the plot border to draw
subplot: sets the position of subplot
top_title: sets position of title at top of plot (default)
bottom_title: sets position of title at the bottom of plot
zlabel: sets the z-axis label
-vinayak
--------- cut the following functions to respective files -----
--------- bottom_title.m ----------------------
function bottom_title (text)
% usage: bottom_title (text)
%
% NOTE: this will work only with gnuplot installed with
% multiplot patch
%
% makes a title with the given text at the bottom of the plot
% rather than the top.
%
if (nargin != 1)
error ("usage: bottom_title (text)");
endif
if (isstr (text))
set top_title
set title
command = sprintf ("set bottom_title \"%s\"", text);
eval (command);
else
error ("error: bottom_title: text must be a string");
endif
endfunction
-------------- mplot.m ---------------------
function mplot (...)
# usage: mplot (x, y)
# mplot (x1, y1, x2, y2, ...)
# mplot (x, y, fmt)
#
# This is a modified version of plot() command to work with
# multiplot version of gnuplot to plot multiple plots per page.
# This plot version automatically updates the plot position to
# next plot position after making the plot in the given subplot
# position.
#
# See command plot() for the various options to this command
# as this is just mulitplot version of the same command.
#
#
# global variables to keep track of multiplot options
#
global multiplot_mode
global multi_xsize multi_ysize
global multi_xn multi_yn
global multi_xi multi_yi
#
set nologscale;
set nopolar;
plot_int ("plot", all_va_args);
#
# update the plot position
#
if ( multiplot_mode == 1 )
if ( multi_xi < multi_xn )
multi_xi = multi_xi + 1;
else
multi_xi = 1;
if( multi_yi < multi_xn )
multi_yi = multi_yi + 1;
else
multi_yi = 1;
endif;
endif;
xo = (multi_xi - 1.0)*multi_xsize;
yo = (multi_yn - multi_yi)*multi_ysize;
command = sprintf ("set orgin %g,%g", xo,yo);
eval (command);
endif;
endfunction
function multiplot (xn,yn)
---------------multiplot.m ------------------------
% usage: multiplot (xn,yn)
%
% NOTE: this will work only with gnuplot installed with
% multiplot patch
%
% Sets and resets multiplot mode
%
% if multiplot(0,0) then it will close multiplot mode and
% and if arguments are non-zero, then it will set up
% multiplot mode with xn,yn subplots along x and y axes.
%
% See other plotting commands too.
%
% global variables to keep track of multiplot options
%
global multiplot_mode
global multi_xsize multi_ysize
global multi_xn multi_yn
global multi_xi multi_yi
%
% check calling argument count
if (nargin != 2)
error "usage: multiplot (xn,yn)"
endif
% check for scalar inputs
if (!(is_scalar(xn) && is_scalar(yn)))
error ("multiplot: xn and yn have to be scalars");
endif
xn = fix(xn);
yn = fix(yn);
if ( xn == 0 && yn == 0 )
set nomultiplot;
set size 1,1
set orgin 0,0
multiplot_mode = 0;
multi_xsize = 1;
multi_ysize = 1;
multi_xn = 1;
multi_yn = 1;
multi_xi = 1;
multi_yi = 1;
return;
else
if ( ( xn < 1 ) || ( yn < 1 ) )
error ("multiplot: xn and yn have to be positive int");
endif;
set multiplot;
xsize = 1.0 ./ xn;
ysize = 1.0 ./ yn;
command = sprintf ("set size %g,%g", xsize,ysize);
eval (command);
xo = 0.0;
yo = (yn - 1.0)*ysize;
command = sprintf ("set orgin %g,%g", xo,yo);
eval (command);
multiplot_mode = 1;
multi_xsize = xsize;
multi_ysize = ysize;
multi_xn = xn;
multi_yn = yn;
multi_xi = 1;
multi_yi = 1;
endif;
endfunction
--------------- oneplot.m --------------------------
function oneplot ()
% usage: oneplot
%
% NOTE: this will work only with gnuplot installed with
% multiplot patch
%
% Switches from multiplot (if in multiplot mode) to single plot
% mode
%
global multiplot_mode
set nomultiplot;
set size 1,1
set orgin 0,0
multiplot_mode = 0;
endfunction
----------- plot_border.m ----------------------
function plot_border (side, ...)
% usage: plot_border (side, ...)
%
% NOTE: this will work only with gnuplot installed with
% multiplot patch
%
% multiple arguments allowed to specify the sides on which
% the border is shown. allowed strings:
%
% allowed input strings:
%
% "blank", "BLANK", "b", "B", ---> No borders displayed
% "all", "ALL", "a", "A", ---> All borders displayed
% "north", "NORTH", "n", "N", ---> North Border
% "south", "SOUTH", "s", "S", ---> South Border
% "east", "EAST", "e", "E", ---> East Border
% "west", "WEST", "w", "W", ---> West Border
%
border = 0;
arg = side;
if ( ! isstr(arg) )
error "plot_border: input not a string"
endif;
% check first argument
south = strcmp(arg,"south") || strcmp(arg,"SOUTH") ;
south = south || strcmp(arg,"s") || strcmp(arg,"S") ;
north = strcmp(arg,"north") || strcmp(arg,"NORTH") ;
north = north || strcmp(arg,"n") || strcmp(arg,"N") ;
east = strcmp(arg,"east") || strcmp(arg,"EAST") ;
east = east || strcmp(arg,"e") || strcmp(arg,"E") ;
west = strcmp(arg,"west") || strcmp(arg,"WEST") ;
west = west || strcmp(arg,"w") || strcmp(arg,"W") ;
all = strcmp(arg,"all") || strcmp(arg,"ALL") ;
all = all || strcmp(arg,"a") || strcmp(arg,"A") ;
blank = strcmp(arg,"blank") || strcmp(arg,"BLANK") ;
blank = blank || strcmp(arg,"b") || strcmp(arg,"B") ;
if ( south )
border = 1;
elseif ( north )
border = 4;
elseif ( east )
border = 8;
elseif ( west )
border = 2;
elseif ( all )
border = 15;
elseif ( blank )
border = 0;
endif;
% check the remaining arguments
va_start();
while (--nargin)
arg = va_arg();
if ( ! isstr(arg) )
error "plot_border: input not a string"
endif;
south = strcmp(arg,"south") || strcmp(arg,"SOUTH") ;
south = south || strcmp(arg,"s") || strcmp(arg,"S") ;
north = strcmp(arg,"north") || strcmp(arg,"NORTH") ;
north = north || strcmp(arg,"n") || strcmp(arg,"N") ;
east = strcmp(arg,"east") || strcmp(arg,"EAST") ;
east = east || strcmp(arg,"e") || strcmp(arg,"E") ;
west = strcmp(arg,"west") || strcmp(arg,"WEST") ;
west = west || strcmp(arg,"w") || strcmp(arg,"W") ;
all = strcmp(arg,"all") || strcmp(arg,"ALL") ;
all = all || strcmp(arg,"a") || strcmp(arg,"A") ;
blank = strcmp(arg,"blank") || strcmp(arg,"BLANK") ;
blank = blank || strcmp(arg,"b") || strcmp(arg,"B") ;
if ( south )
border = border + 1;
elseif ( north )
border = border + 4;
elseif ( east )
border = border + 8;
elseif ( west )
border = border + 2;
elseif ( all )
border = 15;
elseif ( blank )
border = 0;
endif;
%
end;
if ( border == 0 )
set noborder;
else
command = sprintf ("set border %d", border);
eval (command);
endif;
endfunction
-----------------subplot.m --------------------------------
function subplot (xn,yn)
% usage: subplot (xn,yn)
%
% NOTE: this will work only with gnuplot installed with
% multiplot patch
%
% Sets subplot position in multiplot mode for next
% plot. The multiplot mode has to be previously initialized
% using multiplot() command.
%
%
% global variables to keep track of multiplot options
%
global multiplot_mode
global multi_xsize multi_ysize
global multi_xn multi_yn
%
% check calling argument count
if (nargin != 2)
error "usage: subplot (xn,yn)"
endif
% check for scalar inputs
if (!(is_scalar(xn) && is_scalar(yn)))
error ("subplot: xn and yn have to be scalars");
endif
xn = fix(xn);
yn = fix(yn);
%
if ( multiplot_mode ~= 1)
error ("subplot: not in multiplot mode");
endif;
% get the sub plot location
if ( xn < 1 || xn > multi_xn || yn < 1 || yn > multi_yn )
error ("subplot: incorrect xn and yn");
endif;
xo = (xn - 1.0)*multi_xsize;
yo = (yn - yn)*multi_ysize;
command = sprintf ("set orgin %g,%g", xo,yo);
eval (command);
endfunction
------------------ top_title.m -------------------------
function top_title (text)
% usage: top_title (text)
%
% NOTE: this will work only with gnuplot installed with
% multiplot patch
%
% makes a title with text "text" at the top of the plot
%
if (nargin != 1)
error ("usage: top_title (text)");
endif
if (isstr (text))
set bottom_title
set title
command = sprintf ("set top_title \"%s\"", text);
eval (command);
else
error ("error: top_title: text must be a string");
endif
endfunction
---------------------- zlabel.m ------------------------------
function zlabel (text)
% usage: zlabel (text)
%
% Defines a label for the z-axis of a plot. The label will appear the
% next time a plot is displayed.
%
% See other plotting commands also.
if (nargin != 1)
error ("usage: zlabel (text)");
endif
if (isstr (text))
command = sprintf ("set zlabel \"%s\"", text);
eval (command);
else
error ("error: zlabel: text must be a string");
endif
endfunction
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- scripts to use multiplot extensions,
Vinayak Dutt <=