How to set size of subfigures in a figure?

58 Ansichten (letzte 30 Tage)
Fatih Temiz
Fatih Temiz am 23 Nov. 2017
Bearbeitet: Robert U am 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 Kommentare
Walter Roberson
Walter Roberson am 23 Nov. 2017
Is your figure docked? The position is not used for docked figures.
Fatih Temiz
Fatih Temiz am 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.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Robert U
Robert U am 24 Nov. 2017
Bearbeitet: Robert U am 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 Kommentare
Fatih Temiz
Fatih Temiz am 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 am 24 Nov. 2017
Bearbeitet: Robert U am 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

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by