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

조회 수: 322 (최근 30일)
KCE
KCE 2021년 8월 19일
댓글: DGM 2021년 8월 24일
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
Jan
Jan 2021년 8월 19일
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 2021년 8월 19일
편집: KCE 2021년 8월 19일
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?

댓글을 달려면 로그인하십시오.

채택된 답변

DGM
DGM 2021년 8월 19일
편집: DGM 2021년 8월 19일
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
KCE
KCE 2021년 8월 24일
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 2021년 8월 24일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Axis Labels에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by