I answered this in this other section , and also gave an example of how to improve the use of the axis space (subplot) here (find the setCustomPlotArea
subfunction inside the kmeans_test
function).
The short answer is to position the axes in order to occupy the whole figure as follows:
set(gca,'Position',[0 0 1 1]) % Make the axes occupy the whole figure
But if you want to keep ylabel, xlabel, etc., you will have to use the following approach:
Delete dead space for only one axis
figure plot([1 3]) title('Cool title') ylabel('Ylabel yeah') xlabel('Xlabel nah') % Approach tightPos=get(gca,'TightInset') noDeadSpacePos = [0 0 1 1] + [tightPos(1:2) -(tightPos(1:2) + ... tightPos(3:4))]; set(gca,'Position',noDeadSpacePos)
Which gives you the following figure:
Removing dead space for multiple axes
I adapted setCustomPlotArea as follows:
function squeeze_axes(handles) % % squeeze_axes(handles) Squeeze axes to remove dead space. % % Inputs: % % -> handles: the subplot axes handles organized as a grid. Ie % handles(1,1) is the axes in the first line and first column, whereas % handles(4,4) is the axes in the forth line and forth column. % % - Creation Date: Mon, 16 Sep 2013 % - Last Modified: Tue, 17 Sep 2013 % - Author(s): % - WSFreund <wsfreund_at_gmail_dot_com> % TODO: Make squeeze axes compatible with axes that occupy multiple % subplot places. nHorSubPlot = size(handles,2); nVertSubPlot = size(handles,1); subplotWidth = 1/nHorSubPlot; subplotHeight = 1/nVertSubPlot; botPos = linspace(1-subplotHeight,0,nVertSubPlot); leftPos = linspace(0,1-subplotWidth,nHorSubPlot); for curLine=1:nVertSubPlot for curColumn=1:nHorSubPlot curAxes = handles(curLine,curColumn); if curAxes % Set OuterPosition to occupy as most space as possible curAxesOuterPos = [leftPos(curColumn) botPos(curLine) subplotWidth ... subplotHeight]; set(curAxes,'OuterPosition',curAxesOuterPos); % Remove dead space inside subplot border: curAxesTightPos=get(curAxes,'TightInset'); noDeadSpacePos = curAxesOuterPos + [curAxesTightPos(1:2) ... -(curAxesTightPos(1:2) + curAxesTightPos(3:4))]; set(curAxes,'Position',noDeadSpacePos) end end end end
Overlay the generic matlab subtitle function as follows:
figure nLines = 2; nColumns = 3; handles = zeros(nLines,nColumns) for line = 1:nLines for column = 1:nColumns handles(line,column)=subplot(nLines,nColumns,column+(line-1)*nColumns); plot([line column]); title(sprintf('Cool title (%d,%d)',line,column)) ylabel(sprintf('Ylabel yeah (%d,%d)',line,column)) xlabel(sprintf('Xlabel nah (%d,%d)',line,column)) end end
Gives you:
Removing its dead space:
squeeze_axes(handles)
As an exercise, I give the case when you have axes that occupy more than one place in the grid.