1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
## Copyright (C) 1996 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 2, 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, write to the Free
## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
## 02111-1307, USA.
## usage: subplot (rows, columns, index)
## subplot (rcn)
##
## NOTE: this will work only with gnuplot installed with
## multiplot patch (or version 3.6 beta)
##
## Sets gnuplot in multiplot mode and plots in location
## given by index (there are columns X rows subwindows)
##
## Input:
##
## rows : number of rows in subplot grid
## columns: number of columns in subplot grid
## index : index of subplot where to make the next plot
##
## If only one arg, then it (crn) has to be three digit value
## specifying the location in digit 1 (rows) and 2 (columns) and digit
## 3 is the plot index
##
## The plot index runs row-wise,i.e., first all the columns in a row
## are filled and then the next row is filled
##
## For example, plot with 4 X 2 grid, will have plot indices running as
## follows:
##
## -----------------------------------
## | | | | |
## | 1 | 2 | 3 | 4 |
## | | | | |
## -----------------------------------
## | | | | |
## | 5 | 6 | 7 | 8 |
## | | | | |
## -----------------------------------
##
## Author: Vinayak Dutt <Dutt.Vinayak@mayo.EDU>
## Adapted-By: jwe
function subplot (rows, columns, index)
if (! gnuplot_has_multiplot)
error ("subplot: gnuplot does not appear to support this feature");
endif
## global variables to keep track of multiplot options
global __multiplot_mode__ = 0;
global __multiplot_xsize__;
global __multiplot_ysize__;
global __multiplot_xn__;
global __multiplot_yn__;
global __multiplot_xi__;
global __multiplot_yi__;
if (nargin != 3 && nargin != 1)
usage ("subplot (rows, columns, index) or subplot (rcn)");
endif
if (nargin == 1)
if (! (is_scalar (rows) && rows >= 0))
error ("subplot: input rcn has to be a positive scalar");
endif
tmp = rows;
index = rem (tmp, 10);
tmp = (tmp - index) / 10;
columns = rem (tmp, 10);
tmp = (tmp - columns) / 10;
rows = rem (tmp, 10);
elseif (! (is_scalar (columns) && is_scalar (rows) && is_scalar (index)))
error ("subplot: columns, rows, and index have to be scalars");
endif
columns = round (columns);
rows = round (rows);
index = round (index);
if (index > columns*rows)
error ("subplot: index must be less than columns*rows");
endif
if (columns < 1 || rows < 1 || index < 1)
error ("subplot: columns,rows,index must be be positive");
endif
if (columns*rows == 1)
## switching to single plot ?
oneplot ();
## XXX FIXME XXX -- do we really need to reset these here?
__multiplot_xn__ = 1;
__multiplot_yn__ = 1;
else
## doing multiplot plots
if (! __multiplot_mode__
|| __multiplot_xn__ != columns
|| __multiplot_yn__ != rows)
__multiplot_mode__ = 1;
__multiplot_xn__ = columns;
__multiplot_yn__ = rows;
__multiplot_xsize__ = 1.0 ./ columns;
__multiplot_ysize__ = 1.0 ./ rows;
gnuplot_command_replot = "cle;rep";
gset multiplot;
eval (sprintf ("gset size %g, %g", __multiplot_xsize__,
__multiplot_ysize__));
endif
## get the sub plot location
yp = fix ((index-1)/columns);
xp = index - yp*columns - 1;
__multiplot_xi__ = ++xp;
__multiplot_yi__ = ++yp;
## set the origin
xo = (xp - 1.0) * __multiplot_xsize__;
yo = (rows - yp) * __multiplot_ysize__;
eval (sprintf ("gset origin %g, %g", xo, yo));
endif
endfunction
|