# How to change figure size?

9 897 views (last 30 days)

Show older comments

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 Comments

### Accepted Answer

Chad Greene
on 30 Jan 2015

Edited: MathWorks Support Team
on 28 Apr 2021

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])

You can also save a handle to your figure and set the Position property using dot notation:

f = figure;

f.Position = [100 100 540 400];

For an example of changing figure size programmatically, see the following:https://www.mathworks.com/help/matlab/ref/figure.html#mw_e279e63f-1641-4b14-a781-c5facd020190

For more information on figure properties, refer to the following Documentation:https://www.mathworks.com/help/matlab/ref/matlab.ui.figure-properties.html

##### 6 Comments

Steven Lord
on 20 Feb 2020

### More Answers (5)

Constantino Carlos Reyes-Aldasoro
on 13 Jul 2018

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.

##### 2 Comments

Jan Cagan
on 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.

##### 1 Comment

Ethan Duckworth
on 10 Oct 2022

carlo
on 4 Aug 2022

Edited: Walter Roberson
on 6 Aug 2022

clear;clc;

alfa 0:2:6.28;

y=sin(alfa);

plot (alfa,y,'r')

##### 2 Comments

karim botros
on 12 Jun 2023

It is simple in matlab, this feature is integrated in position property of Figure function.

All you have to do is to replace the values of startingX startingY Width Height, like the following:

figure('Position',[startingX startingY Width Height]);

% Example with numerical values.

figure('Position',[600 100 1500 1000]);

It is a bit not very intuitive in matlab since they combine size and position in one property but now you know to set them both.

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!