How to set size of subfigures in a figure?
58 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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
Antworten (1)
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.
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
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
Siehe auch
Kategorien
Mehr zu Subplots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!