File Exchange

image thumbnail


version (122 KB) by Felipe G. Nievinski
Asymmetric subplots with variable inner gaps and outer margins.


Updated 08 Jan 2013

View Version History

View License

subtightplot is a merger of Pekka Kumpulainen's tight_subplot and Nikolay S.'s subplot_tight. It extends the former, which supports asymmetric subplots, to allow for variable margins in addition to gaps, as in the latter.

Existing scripts that currently call Matlab's builtin subplot can be adapted with minimal modification by issuing the following command upfront:
subplot = @(m,n,p) subtightplot(m,n,p,opt{:});
where opt = {gap, width_h, width_w} describes the inner and outer spacings. The screenshot attached shows demo results for examples modified from the subplot documentation.

For axes ticks and labels and locations, see Matlab's axes properties documentation, or try Eran Ofek's subplot1 for a more guided approach.

If you prefer a post-processing solution, see Richard Crozier's tightfig or Aditya's spaceplots.

Alon Geva's subplotplus is interesting for making complicated subplot arrangements; apparently gaps and margins are fixed. Aslak Grinsted's subaxis is based on a richer, more expressive HTML jargon. Joris Kampman's subplot_grid is a colossal 3500+ line object-based implementation. These high-end alternatives are a departure from the built-in subplot's calling syntax, though.

For an overview, please see the Dec 21st, 2012 post on the File Exchange Pick of the Week Blog, titled "Figure margins, subplot spacings, and more…".

Cite As

Felipe G. Nievinski (2021). subtightplot (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (66)

Sanita Dhaubanjar


ziwei ding

daisuke hirose

Good Job!!!!!
Thank you so much!!!!!

Great Work!

Dion Ringo

Excellent. Thank you.

Ramses Meza

Exactly what I was looking for! Thanks!


Great contribution to subplot, same feel as subplot with added flexibility

Oindrila Nath

i have an array of 4by8 total 30 elements. How to use this function in subplot ?


Better than tight_subplot.
subtightplot can be used with hold on; while tight_subplot can not.


Thanks! it works

Joseph Lockwood

CHEERS! Massive help when plotting

Beat Braem

I like it a lot, but it took me a while to figure out how to properly set the margins between the plots

Mao Ye

Giovanni Laserra

thanks a lot


William Warriner

Greg Pittam

Excellent! I've been wanting this for a long time and it's been here all along!

Yijun ZHOU

Tsung-Hsi Wu

Nikolaus Luhrs

Highly recomend, it actually works and stops matlabs horrible plotting habbits

Abdullah Abdulaziz

Thanks a lot man! I've been looking for this for a while!

Hannes Michaels

Jeremy Priest

Guru Shifu

Shruthi N V

Shruthi N V

Soojong Pak

Hamidreza Heydarian

HongKyung Kim

ZIhui Zhang

amanda montazem

David Huynh

Martin Hagmüller

Stefan Appelhoff

Jonathan Becker

M Schmidt


Very usefull and easy to use!

Jonathan Kellogg

Nevermind, my fault.

Jonathan Kellogg

Jonathan Kellogg

Any chance to add code that would make the width/height of the subplots equal by default? It's super helpful, but that would be my one request so I didn't have to fiddle with the widths. Perhaps the inequality is caused by my removal of YTickLabels and no YLabel in my 1 x 2 subplot trial.

w rq


Vasily Vasilyev




Great, thank you!!!


just works


Alberto Scrofani

Finally a script very easy to use, basically use the same syntax of subplot!!!

Felipe G. Nievinski

@Erik: yes, it's possible to pass additional input arguments (after the 6 first ones), e.g.:
figure, subtightplot(3,2,1,[],[],[],'Color','b')
Any property-value pairs are passed on to subplot; the 'replace' input is not supported.

Abhinav Gupta

Thanks a ton!

Very helpful and easy to use.


Yuan Zhou

Very useful. Save me a lot of time. Thanks.

Yuan Zhou


Works great with the suggested function handle. Is it possible to pass more inputs to subplot (see subplot documentation)? I get an error when I try this:

subplot = @(m,n,p,varargin) subtightplot(m,n,p,[],[],[],varargin{:});

and then I get an error if I use e.g. subplot(m,n,p,'replace'). Is it possible to support the various subplot syntaxes in this way? E.g. write subtightplot in such manner that it works like this:

subplot = @(m,n,p,varargin) subtightplot(m,n,p,varargin{:},gap, marg_h, marg_w);

If you then use the same input argument checking as subplot itself uses, you could basically rewrite subplot with the support for gap, marg_h and marg_w.


thank you :-)


Excellent! Thanks a lot

Anton Semechko

Felipe G. Nievinski

@Tamanaco: clear subplot;


Hi Felipe! How do you revert the
subplot = @(m,n,p) subtightplot(m,n,p,opt{:});
assignment back to the original Matlab subplot function? Regards and thanks!

Joshua Carmichael

Excellent utility, and works well with export_fig. I implement it with all of my tools.

Julian Gallego


really useful for me
many thanks

Alexander Stepanov

Very useful. Thought of writing it myself before found this submission.

MATLAB Release Compatibility
Created with R2011b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

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

Start Hunting!