MATLAB Answers

How to change figure size?

조회 수: 12,342(최근 30일)
John
John 30 Jan 2015
댓글: Steven Lord 20 Feb 2020
I'm trying to change the figure size. In the example below, I expected figure(2) to have a different size. In order to achieve this, I added:
set(gcf, 'PaperUnits', 'inches');
set(gcf, 'PaperSize', [4 2]);
set(gcf, 'PaperPositionMode', 'manual');
set(gcf, 'PaperPosition', [0 0 4 2]);
Any idea why this isn't working?
clc;
clear all;
t = 0:.1:4*pi;
y = sin(t);
figure(1)
set(gcf, 'renderer', 'painters');
plot(t,y)
xlabel('Time(s)')
ylabel('y(t)')
title('Sin function')
legend('y=sin(t)')
axis([0 t(end) -1.5 1.5])
set(gca,...
'Units','normalized',...
'YTick',-1.5:.5:1.5,...
'XTick',0:t(end)/4:t(end),...
'FontUnits','points',...
'FontWeight','normal',...
'FontSize',9,...
'FontName','Times')
set(gca, 'Position', get(gca, 'OuterPosition') - ...
get(gca, 'TightInset') * [-1 0 1 0; 0 -1 0 1; 0 0 1 0; 0 0 0 1]);
figure(2)
set(gcf, 'renderer', 'painters');
set(gcf, 'PaperUnits', 'inches');
set(gcf, 'PaperSize', [4 2]);
set(gcf, 'PaperPositionMode', 'manual');
set(gcf, 'PaperPosition', [0 0 4 2]);
plot(t,y)
xlabel('Time(s)')
ylabel('y(t)')
title('Sin function')
legend('y=sin(t)')
axis([0 t(end) -1.5 1.5])
set(gca,...
'Units','normalized',...
'YTick',-1.5:.5:1.5,...
'XTick',0:t(end)/4:t(end),...
'FontUnits','points',...
'FontWeight','normal',...
'FontSize',9,...
'FontName','Times')
set(gca, 'Position', get(gca, 'OuterPosition') - ...
get(gca, 'TightInset') * [-1 0 1 0; 0 -1 0 1; 0 0 1 0; 0 0 0 1]);

  댓글 수: 0

로그인 to comment.

채택된 답변

Chad Greene
Chad Greene 30 Jan 2015
편집: MathWorks Support Team 27 Nov 2018
The paper size options are for printing, so they don’t change the size of the figure.
The ‘Position’ property sets the size of the figure (in pixels by default). Specify the property as a vector of the form [x y width height], where x and y define the distance from the lower-left corner of the screen to the lower-left corner of the figure. Also note that you can set several properties at once without calling set(gcf,… multiple times. You can even include them when you create the figure:
figure('Renderer', 'painters', 'Position', [10 10 900 600])

  댓글 수: 6

표시 이전 댓글 수: 3
Ebrahim Akbari
Ebrahim Akbari 22 Oct 2017
Thank you dear Chad. It was useful for me.
Image Analyst
Image Analyst 22 Oct 2017
To maximize the figure window in Windows, you can use the attached function.
Otherwise you can also use code like this, to take up most of the screen except for the task bar at the bottom.
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0, 0.04, 1, 0.96]);
The latter code just resizes - it does not do an official "maximization" like the attached function does.
Steven Lord
Steven Lord 20 Feb 2020
This is a bit late, but if you're using release R2018a or later you can use the WindowState property of figure objects to maximize or minimize the figure or display it in full-screen mode instead of using the function Image Analyst attached to the comment above.

로그인 to comment.

추가 답변(3개)

Chad Greene
Chad Greene 30 Jan 2015
For full-screen figures, you can use fullfig.

  댓글 수: 0

로그인 to comment.


Constantino Carlos Reyes-Aldasoro
First, there seems to be some confusion as to what your refer by size, which can be a) on the screen or b) printed or c) in pixel size (as in a jpg).
If you want to have the two figures in the screen with identical sizes, then the important parameter is 'Position' OF THE FIGURE, i.e.
figure(1)
plot(t,y)
set(gcf,'Position',[100 100 500 500])
figure(2)
plot(t2,y2)
set(gcf,'Position',[100 100 500 500])
That will have the two figures with exactly the same size, and in the same position. You can change where each is placed and the dimensions. Actually, it is better to use handles than gcf as gcf uses the last figure that was addressed, example
h1=figure(1);
plot(t,y)
set(h1,'Position',[10 10 500 500])
h2=figure(2);
plot(t2,y2)
set(h2,'Position',[510 10 500 500])
Notice that gcf refers to figures, if you change with gca, you will be moving the axis INSIDE the figure but the figure size will not change.
If you want to change in print or in an external image let me know and I will expand.

  댓글 수: 1

Jan Cagan
Jan Cagan 23 Jul 2018
Dear Constantino,
Thank you for the detailed answer. As regards "Printing and Exporting" properties of a figure, I am dealing with this properties correctly I think. Currently, I am observing that the problem is not about exporting. Also, other graphical objects have problems with size consistency. For example, "msgbox" with the same text has different size sometimes...
J.

로그인 to comment.


Jan Cagan
Jan Cagan 5 Jun 2018
Hi,
I am using this figure initialization and export:
fig = figure('units','inch','position',[0,0,3.3,2*3.3/3]);
print(fig,name,'-r800','-dpng');
In most cases, the output has the same size, but sometimes the size is a bit different. Why? How to avoid this behavior? I am using Matlab in Ubuntu 16.04 with -nodesktop -softwareopengl
Thank you in advance. J.

  댓글 수: 0

로그인 to comment.

이 질문에 답변하려면 로그인을(를) 수행하십시오.


Translated by