View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from

4.2 | 42 ratings Rate this file 257 Downloads (last 30 days) File Size: 2.54 KB File ID: #7772 Version: 1.3
image thumbnail



Ben Barrowes (view profile)


03 Jun 2005 (Updated )

Places text as a title, xlabel, or ylabel on a group of subplots.

Editor's Notes:

This file was a File Exchange Pick of the Week

| Watch this File

File Information

PLaces text as a title, xlabel, or ylabel on a group of subplots. Returns a handle to the label and a handle to the axis.


returns handles to both the axis and the label.


returns a handle to the axis only. suplabel(text) with one input argument assumes whichLabel='x'

whichLabel is any of 'x', 'y', or 't', specifying whether the text is to be the xlable, ylabel, or title respectively.
supAxes is an optional argument specifying the Position of the "super" axes surrounding the subplots. supAxes defaults to [.075 .075 .85 .85] specify supAxes if labels get chopped or overlay subplots

   [ax,h1]=suplabel('super X label');
   [ax,h2]=suplabel('super Y label','y');
   [ax,h3]=suplabel('super Title' ,'t');
  SEE ALSO: text, title, xlabel, ylabel, zlabel, subplot,
            suptitle (Matlab Central)


This file inspired Biorthogonal Wavelet Compression Tool and Kolsky Bar.

MATLAB release MATLAB 7 (R14)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (62)
12 Oct 2016 Pravin Prame Kumar

07 Oct 2016 Martin

Martin (view profile)

Does a great job. However, if you change line 65 from:
if ~isstr(text) | ~isstr(whichLabel)
if ((iscell(text) & ~isstr([text{:}])) | (~iscell(text) &~isstr(text) )) | ~isstr(whichLabel)
the function will also display multiline titles contained in a cell array

15 Jun 2016 Matilda

with Matlab R2015b, suplabel changes all my other single plot titles fontsize.
Has anyone else had this problem ?
Thanks !

Comment only
03 Jun 2016 Randolph Crawford

Works great in R2016a!

06 May 2016 Greg Holst

Awesome. This should be a standard function. R2016a.

03 May 2016 Sardar Usama

Very useful! MATLAB should pre-include this in next version!

06 Oct 2015 Omar Mian

When I don't fill every column space in the figure with a subplot, the title gets centred above the created sub-plots rather than the whole figure Window. e.g.:

[ax,h]=suplabel('super Title' ,'t');

How can I prevent this or move the title to the centre of the figure window?


Comment only
04 Aug 2015 Dan Weaver

Very useful; however, it is awkward to adjust the axes together, and isn't compatible with plotyy.

29 Jun 2015 Andy

Andy (view profile)

Useful script.

Added new argument(handles) and then ah=handles if present. This then allows choice of handles to be used to define location of axes titles. Therefore allowing titles of plots in a grid that have common titles in rows/columns but not common titles for all plots.

For example, this type of plot could be created.

12 Mar 2015 Philipp

First of all thank you very much for the excellent package.
My question is the following:
Is there any way to horizontally align the ylabels? The problem is that my Y-axis numbers go from 0.1 to 0.0001, causing the ylabels to be wherever but not nicely aligned.

Comment only
11 Feb 2015 Boriboon

this is really useful!!!

05 Feb 2015 Ayhan

Ayhan (view profile)

05 Jan 2015 Aree

Aree (view profile)

Response to Will (Nov 2014): "Handles of type Legend cannot be made the current Axes."

Before 2014b, I used to add the line


as suggested by comment by Jeff (Mar 2012) so that the legends do not get deleted out. I found out after 2014b adding Legends into axes list created problems.

But now, I can remove the line with no ill-effects (so it seems).

Comment only
31 Dec 2014 IOCAS Shen

21 Nov 2014 Will Adler

This is giving me problems with R2014b. I get the following error:
Error using axes
Handles of type Legend cannot be made the current Axes.
Error in suplabel (line 87)
for k=1:length(currax), axes(currax(k));end % restore all other axes

I think it has something to do with this:

Comment only
14 Nov 2014 Patricia

Thanks for this function, very helpful!
I have a problem when saving the figure though.
I use it together with the tight_subplot function and I noticed that when I modify the positions of the labels (either x,y,or t) and save it as as figure (.fig - haven't tried other formats), it saves without the modifications, which is a bit frustrating. Do you have any idea on why this might be happening?


Comment only
14 Nov 2014 Patricia

13 Nov 2014 Brian

Brian (view profile)

19 Sep 2014 Sebastien Roy

Great script. Very useful to document a scene with subplots. However, it crashes if no supAxes is supplied and no visible axe is in the figure. This case happens if, for example, a figure is composed of subplots filled with images with imshow.

09 Jan 2014 Leo Simon

Great script. Is there any way to use \bar and \tilde with it? It appears not to be possible. E.g.,
works fine but
can't interpret the string. The handle doesn't appear to have an 'Interpreter' field either.

06 Nov 2013 Yuji Zhang

Hi everyone~ I read the code again and found what was wrong... I should put in the argument [.08 .08 .5 .5]. When I changed in the function supAxes=[.08 .08 .5 .5] (line 46), it was overwritten (line 49-57). Thanks...

06 Nov 2013 Yuji Zhang

Hi, I changed the position by doing supAxes=[.08 .08 .5 .5];

but the title position does change...

Does anybody have the same thing or know what's going on? Any thoughts are appreciated. Thanks!

04 Aug 2013 Felipe

Felipe (view profile)

if (nargout < 2), clear h; end
if (nargout < 1), clear ax; end

Comment only
04 Aug 2013 Felipe

Felipe (view profile)

Hint: if you need to specify the optional supAxes argument, do set(ax,'Visible','one'), redimension it manually/visually, then do get(ax,'Position') to obtain the desired value.

28 Nov 2012 Rishabh Kasliwal

i just plugged in suplabel('my title','t') on my subplot containining figure and it worked !. works pretty well for my purpose

02 May 2012 Matlab2010

problems with plotyy.
calling this after plotyy removes the 2nd axis plot, as per omar above.

cant seem to get it to work with a pre call either

02 May 2012 Morten

Morten (view profile)

The titles/labels can be moved away from the figure edges by manually changing the value of the "axBuf=.04;" to "axBuf=.001;", this fixed the issue for me.

It appears that the code allows TeX commands (like '\fontsize{14}TEXT HERE') for the y-axis command, but not x...

20 Mar 2012 Jeff

Jeff (view profile)

excellent, thank you for this. very easy to use. I added the following after line 39 in order to preserve sublot legends:


13 Sep 2011 Erica B

Anyway to get the super label to not be squished at the top of the figure window, and closer to the subplots? Top of super title is nearly cut-off, while there is a chunk of space between the super title and the subplots.

I tried
[ax,h1]=suplabel([' ',' ','Title'],'t');
to put some empty lines above the title, but it's still squished at the top of the window...

Comment only
24 Jun 2011 Jeff Evans

26 Jan 2011 K R

K R (view profile)

This is fantastic - a huge time saver and so easy to use. Thank you!

02 Dec 2010 Omar Mian

Does not work with removes the 2nd axis plot

Comment only
12 Nov 2010 Christopher

And I have some code that changes that figure creation time using suplabel from 30 seconds back down to 5.2 seconds. Apply the following to suplabel, replacing the loop through ah (lines 74 to 82) with:
and replacing line 110, kudos to Daniel Golden for his suggestion above, with
ch = get(get(ax, 'parent'), 'children');
set(get(ax, 'parent'), 'children', [ch(2:end); ch(1)]);
Now (almost) all multi-handle axis operations are vectorized.

I do not know how to do it yet, but I will try to put up a unified diff patch if I can figure how to attach a file.

Comment only
12 Nov 2010 Christopher

Has anyone given thought to vectorizing or otherwise speeding up suplabel? I have figures with many subplots (of histograms), eg., subplot(6,8,i); and using suplabel to create the x- and y-labels changes the figure creation time from 5 seconds to 30 seconds.

Comment only
14 Oct 2010 Anthony Hopf

Using Lars advice I can use multi-line and latex!! Nice function

14 Oct 2010 Anthony Hopf

Can't seem to get multi-line to work... posted in NewsReader

Comment only
04 Sep 2010 Gemma

Gemma (view profile)

Thank you very much.. i know have some awesomely titled plots :)

01 Jun 2010 Geo

Geo (view profile)

A very useful script!!! Thank you a lot!

22 May 2010 GERMÁN

when I want three titles in the super title. How should it be?

L1 = "Energy spectrum function E = f (FFT (\ kappa) ^ 2) ';
L2 = ['height'];
L3 = ['Regression']
[AX4, h3] = suplabel ([L1, L2, L3], 't');


Comment only
22 May 2010 GERMÁN

when I want three subttulos the super title. How should it be?

L1 = "Energy spectrum function E = f (FFT (\ kappa) ^ 2) ';
L2 = ['height'];
L3 = ['Regression']
[AX4, h3] = suplabel ([L1, L2, L3], 't');

Comment only
25 Feb 2010 Jason

Jason (view profile)

Is there a way to have a second "super Y label" that corresponds to subplots 2 and 4 of the example figure?


Comment only
11 Feb 2010 Patrick Tai

I want to have a super-legend.
When the subplots are all multi-lined with the same grouping scheme, their legends will be the same. Putting a legend in each will be too busy and take too much space.
Is there a way to put the common legend outside the plot matrix?

Comment only
11 Feb 2010 Patrick Tai

04 Feb 2010 Daniel Golden

The problem with zooming is that suplabel places its axis on top of all other axes in the figure. You can fix this by adding the following lines under the

ch = get(get(ax, 'parent'), 'children');
set(get(ax, 'parent'), 'children', [ch(2:end); ch(1)]);

This moves the "suplabel" axis to the bottom of the figures' axes list and allows you to mess with the original axes on the figure.

11 Dec 2009 Lars

Lars (view profile)

Quite useful and simple to use. You might consider to change the argument checking to allow for cell strings (multi-line) labels:

if ~(ischar(text) || (iscell(text) && all(cellfun(@ischar,text))))
error('text must be a string or a cell string')
if ~ischar(whichLabel)
error('whichLabel must be a string')

09 Nov 2009 sophie neve

I have seen another think that is sad : no greek letter is allowed
Example :
suplabel('log_{10} (Re \epsilon *)','y');

does not write the epsilon, right?

Comment only
09 Nov 2009 sophie neve

I have aproblem with it : if I only do 4 subplot out of 6, for example 1,2,4,5 and not 3 and 6, the title is not centered any more.... sad :(

23 Sep 2009 Joe McGlinchy

GREAT! works perfect thanks

03 Sep 2009 Scott Otterson

A quick solution to a common problem. Zooming would be nice -- I haven't checked the underpinnings, but if anyone is interested in taking a look

decorates plots with extra labels and survives the zoom button

07 Aug 2009 Omar Mian

potentially useful for me, but not until zoom/rotate issue is fixed.

Comment only
07 Aug 2009 Omar Mian

24 Feb 2009 Henry

Henry (view profile)

Good tool, but like all other comments, I cannot zoom/rotate the image afterwards.

Comment only
12 Aug 2008 Jake Munster

Useful tool, but as Tom Van Grotel said, I can't zoom in on the subplots! Setting 'HitTest' to 'Off' did not work =(

07 Aug 2008 Pierrick Mialle

16 Jun 2008 Pablo Pablo

I can not rotate an image when I use this function.

Comment only
23 Apr 2008 Tom Van Grootel

Axes below the "Ghost" axes made by SUPLABEL are not editable (zoom, scale, rotate). Hint to improve this: 'HitTest' set to 'Off', but this still did not solve it.

19 Apr 2008 Chris Addison

Exactly what I was looking for! Thanks for this.

31 Mar 2008 pippo baudo

11 Oct 2007 Pablo Velarde


19 Aug 2007 him s

nopes..not working

07 Aug 2006 jon erickson

Thank you--just what I was looking for! very easy to use. Just to follow up on comment 3) above, the default values are [0.08 0.08 0.84 0.84], not a major change.

06 Jun 2005 urs (us) schwarz

1) nice little helper; 2) it would be more convenient if supaxes would default to the outer boundaries of all axes on the canvas if it is not defined by the user (see mtit on the FEX); 3) supaxes' default values do not correspond to those shown in the help section

07 Jun 2005

Updated default values.

03 Sep 2009 1.1

added capability for right side y-label

23 Mar 2010 1.2

Modified to restore visible axes on exit. Now zoomable, etc. on exit.

23 Mar 2010 1.3

Restores visible axes at exit. Now zoomable, etc. at exit.

Contact us