How do I decrease the margins around the subplots in my figure in MATLAB?
1.889 views (last 30 days)
MathWorks Support Team on 27 Jun 2009
I would like to decrease the white space around my plots because when I copy the figure to a Word document, the margins around the axes reduces the size of the plot and I often have to crop this space out in order to increase the plot's size.
MathWorks Support Team on 8 Mar 2022
Edited: MathWorks Support Team on 8 Mar 2022
From R2019b, you can minimize the space around the plots by using tiledlayout function.
For details, please see the following documentation.
- Saving and Copying Plots with Minimal White Space
If you use R2019a and earlier releases, please refer the following information:
The ability to set margins for subplots in a figure is not currently available in MATLAB. However, you may refer to the user-contributed functions "subaxis" or "subtightplot" at MATLAB Central that provides this functionality:
MATLAB Central is a common location for MATLAB users provided by MathWorks where they can share their MATLAB code and ideas.
Note that MathWorks does not guarantee or warrant the use or content of these submissions. Any questions, issues, or complaints should be directed to the contributing author.
More Answers (5)
Jesús Lucio on 12 Feb 2015
I know the question is very old, but it's still very interesting.
A simple way of doing what you want (change margins of subplots) is this:
pos = get(gca, 'Position');
pos(1) = 0.055;
pos(3) = 0.9;
set(gca, 'Position', pos)
to write just after you create each (sub)plot.
This way each plot is resized. 'Position' is the axis property (a 1 x 4 vector) with these fields:
[x y width height]
Obviously, you can change any of the four values to your best choice.
Konstantinos on 20 Nov 2015
Edited: Konstantinos on 20 Nov 2015
Since there is no standard for what margin size is the best this is what I would do
- Once I create the plot I would enable editing from tools menu.
- Resize plots to what I think is best configuration.
- File>Generate Code to have an automated solution
Robby van Delden on 23 Nov 2015
Although ugly, for me it seems to help to multiply the distribution of the subplots for instance by a factor 2:
ax1 = subplot(1,8,[1,2]); .. ax2 = subplot(1,8,[3,4,5,6]); .. %probably not related: ylim([ymin ymax]); .. ax3 = subplot(1,8,[7,8]); linkaxes([ax2,ax1,ax3],'y');
instead of: ax1 = subplot(1,4,1) ax2 = subplot(1,4,[2,3]) ax3 = subplot(1,4,4)
Miquel on 17 Jan 2020
You can use the following code:
ax = gca;
outerpos = ax.OuterPosition;
ti = ax.TightInset;
left = outerpos(1) + ti(1);
bottom = outerpos(2) + ti(2);
ax_width = outerpos(3) - ti(1) - ti(3);
ax_height = outerpos(4) - ti(2) - ti(4);
ax.Position = [left bottom ax_width ax_height];
I found it here: https://uk.mathworks.com/help/matlab/creating_plots/save-figure-with-minimal-white-space.html. I think it should only work for MATLAB R2019b or later versions, but it works for me with version R2018b.