Code covered by the BSD License  

Highlights from
Subplot position calculator

5.0

5.0 | 1 rating Rate this file 12 Downloads (last 30 days) File Size: 2.8 KB File ID: #42763
image thumbnail

Subplot position calculator

by

 

Calculate subplot positions by specifying figure margins and axis scaling.

| Watch this File

File Information
Description

pos = subfigrid(nrows,ncols)
pos = subfigrid(nrows,ncols,offset)
pos = subfigrid(nrows,ncols,offset,scale)

The spacing of axes using the subplot command can be quite large, and manipulating axis positions after plotting can be tricky. For publication quality graphics, it is better to specify the subplot position directly, rather than using subplot indices. For example:

figure
subplot('position',[0.1 0.1 0.2 0.2])
plot(rand(20,1))

This function creates appropriate position vectors, for use in the above scenario, based on the number of subplots required. Optional scaling and offset parameters allow the size of each subplot to be fine-tuned, and space for axis labels to be allotted. All calculations are performed in normalized units.

pos = subfigrid(nrows,ncols) creates an array of positions for positioning axes as subfigures. The array has dimensions [m,p,n]: m is the subplot row, n is the subplot column, and p is the position vector. By default, each axis will be scaled such that [width height] will be [1/ncols 1/nrows].

pos = subfigrid(nrows,ncols,offset) allows a margin offset to be specified. This should be a four-element vector specifying the margins thus: [left right top bottom]. By default offset=[0 0 0 0]. Axes will be scaled to fill the remaining space.

pos = subfigrid(nrows,ncols,offset,scale) allows the axes to be scaled. This should be a two-element vector specifying a scale factor that will be applied to each axis; scale(1) scales the width, scale(2) scales the height. The axes will be scaled such that the offset margin will be retained. By default scale=[1 1].

If scaling is required, but an offset is not, offset may be set to the empty matrix [].

Examples

Ex. 1
% Normal use of subfigrid
scrsz = get(0,'ScreenSize');
nrows = 2;
ncols = 3;
pos = subfigrid(nrows,ncols,...
  [0.05 0.01 0.01 0.05],[0.85 0.88]);

figure('units','pixels','position',...
  [scrsz(3)/4,scrsz(4)/4,scrsz(3)/2,scrsz(4)/2])
for m = 1:nrows
  for n = 1:ncols
      subplot('position',pos(m,:,n))
      plot(randn(20,1))
  end
end

Ex. 2
% Use ind2sub when row/col indices are not available
scrsz = get(0,'ScreenSize');
nrows = 2;
ncols = 3;
pos = subfigrid(nrows,ncols,...
  [0.05 0.01 0.01 0.05],[0.85 0.88]);

figure('units','pixels','position',...
  [scrsz(3)/4,scrsz(4)/4,scrsz(3)/2,scrsz(4)/2])
for p = 1:nrows*ncols
  [m,n] = ind2sub([nrows ncols],p);
  subplot('position',pos(m,:,n))
  plot(randn(20,1))
end

See also SUBPLOT.

Required Products MATLAB
MATLAB release MATLAB 7.11 (R2010b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (1)
23 Jul 2013 Jan Simon

This submission has a very good documentation: H1 line, description of inputs and outputs, example, See also line. Only the name of the author looks cryptic.

The code creates default values for omitted inputs, checks the inputs and contains useful comments.

You can omit the inner of the two loops easily, but this won't be a bottleneck in any program.

This submission is useful and usable for productive work and as example for nice code.

Contact us