Not sure how to use figure('Position',[ ]) to get figures with proper dimensions

319 views (last 30 days)
I want to make the inner region of the .png have the latitude and longitude axes of the plot roughly equal in size and more square.
This is what I was using to set the position:
figure('Position',[1 1 1100 1100])
And the size of the figure is wider than it is taller, but my goal is to have the inner region of the plot (latitude and longitude axes) to be roughly a square. I was using 'axis square' prior, but some of the plots (that have x, y, or both axes labeled) seem to have different sizes when I use saveas with a .png extension.
I have tried using InnerPosition and OuterPosition in the figure command, but have not had any luck.
Also attached is the figure itself.
  2 Comments
Jan
Jan on 19 Aug 2021
Does ot matter, that the axis labels are not readable? How many pixels does your monitor have? Does this work:
figure('Units', 'pixels', 'Position', [100, 100, 400, 400])
It is not clear, what exacty should be square: The inner position of the figure, which is exported to the PNG file or the axes itself? Literally "seem to have different sizes" mean, that they do have the same size and it only looks differently.
KCE
KCE on 19 Aug 2021
Edited: KCE on 19 Aug 2021
I am trying to get the axes itself AND the png file to be the same size (a square). Since there is some white space when it is saved, I want the axis labels to fit between the axes of the plot and the edge of the .png file, so nothing is cut off.
I tried 'axis square' before, but when they were saved, the .png file sizes were different depending on whether or not I had axis labels or not.
Using the above line helped slightly, and now the figure is taller than it is wider. I am using a Mac, so I imagine the pixels should be perfect squares?

Sign in to comment.

Accepted Answer

DGM
DGM on 19 Aug 2021
Edited: DGM on 19 Aug 2021
The margins needed for the labels/title etc may vary, so the inner position will vary. If you can come up with an inner position value which allows for the worst-case (e.g. large tick labels), then you can specify it for all plots.
x = 0:9;
plot(x,x);
% set figure size/location in pixels; doesn't work if figure is docked
set(gcf,'units','pixels','outerposition',[1 1 500 500],'windowstyle','normal')
% set inner position (the plot box); force it square
set(gca,'units','normalized','position',[0.1300 0.1100 0.7750 0.8150], ...
'plotboxaspectratio',[1 1 1])
Of course, plots with short labels or no labels will have excess padding, but that's necessarily the result of making the geometry fixed.
This is a composite of two different plots, showing that the saved images are the same size and the plot boxes are in the same locations
Depending on your version, there may be properties like 'positionconstraint' which may be relevant. I'm running an older version, so you may have to extrapolate.
  8 Comments
KCE
KCE on 24 Aug 2021
I have a few different .m scripts where I want to have figures come out as the same size. I changed the first line to just 'figure;' and that did not seem to solve the issues. Both scripts have identifcal lines to what I posted above. The text labels are all the same font size too.
DGM
DGM on 24 Aug 2021
Can you come up with a simplified example to demonstrate how it's failing? I can see if I can replicate it and maybe try to fix it.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!