How to set size of subfigures in a figure?

48 views (last 30 days)
Fatih Temiz
Fatih Temiz on 23 Nov 2017
Edited: Robert U on 24 Nov 2017
Although a lot of similar questions had been asked, I couldn't solve the problem that setting sizes of subfigures in a figure? As far as I understand MATLAB creates a figure of size 560X420. Associated part of my code is here:
subplot(1,4,1);imshow(remdPic1);title('Part I');
subplot(1,4,2);imshow(remdPic2);title('Part II');
subplot(1,4,3);imshow(remdPic3);title('Part III');
subplot(1,4,4);imshow(remdPic4);title('Part IV');
remdPic1, remdPic3, remdPic4 and remdPic4 are of the same size. While they are matrices of 256X128 I have no problem. Their actual size seems in the figure. However, while they are chosen as matrices of size 256X192 MATLAB shrinks the subfigures. I can guess what the problem is. While each 4 subfigure has 128 pixels width, they fit in 560 pixel. However while each 4 subfigure has 196 pixels width, they don't fit in 560 pixels (196*4=784). I tried to reset the size of the figure with the code
hFig = figure(1);
set(hFig, 'Position', [x y width height])
but the problem is still valid. How can I obtain the actual size of each subfigure in the figure?
  2 Comments
Walter Roberson
Walter Roberson on 23 Nov 2017
Is your figure docked? The position is not used for docked figures.
Fatih Temiz
Fatih Temiz on 24 Nov 2017
Well, actually I don't know how position works. I just tried if it solves my problem, by replacing width and height by larger values. However it didn't solve my problem.

Sign in to comment.

Answers (1)

Robert U
Robert U on 24 Nov 2017
Edited: Robert U on 24 Nov 2017
Hi Fatih Temiz:
You can access the properties of subplots by assigning handles, e.g.
fh = figure;
sfh1 = subplot(1,4,1);
sfh2 = subplot(1,4,2);
If you want to change size you can use the set()-command or the .-operator. Since subplots are made you have to consider to rearrange all of them manually since there is no check whether there is some overlap.
sfh1.Position = sfh1.Position + [0 0 0.05 0];
If you change order of commands as
fh2 = figure;
sfh3 = subplot(1,4,1,'Parent',fh2);
sfh3.Position = sfh3.Position + [0 0 0.05 0];
sfh4 = subplot(1,4,2,'Parent',fh2);
the second subplot sfh4 overrides the first sfh3, thus not all of the subplots are displayed.
You might want to look into axes-command
fh3 = figure;
ah1 = axes('Parent',fh3,'Units','normalized','Position',[0.1 0.1 0.15 0.8]);
ah2 = axes('Parent',fh3,'Units','normalized','Position',[0.3 0.1 0.15 0.8]);
imshow(remdPic1,'Parent',ah1)
You could define the positions as dependent values. Adjustment might then be easier.
Kind regards,
Robert
  3 Comments
Fatih Temiz
Fatih Temiz on 24 Nov 2017
Thank you very much. So, this solution enlarges (or shrinks) the subfigures by a certain constant ratio? However, how can I know which constant should I multiply my figure's size by, in order to catch the actual size?
Robert U
Robert U on 24 Nov 2017
Edited: Robert U on 24 Nov 2017
That depends strongly on the way you change the axes 'Position'-property. It comes in the format
[x_0 y_0 width heigth]
Thus, in the example above the width is changed. You can scale and move the whole axes around in your figure as you please.
The "knowledge" of which factors or addends to use comes from trying. Once you found values you like, you can use them in further plots.
Edit:
You should pay attention to the "Units"-property as well, since it allows to use a normalized position value referring to the figure-window or in absolute pixels, centimeters etc. The Units-property can be changed whenever needed and automatically recalculates the actual values of the Position-property.
Kind regards,
Robert

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!