Delete dead space or increase the size of the figure in the subtitle

I have a problem in Matlab. I display the image as shown in the example and save it with the print command. I want to do this in order to save the image so that there is no dead space. I want to remove the white space in the saved image.

Example: Image with deadspace

The black frame shows the total area occupied by the image. This is really a loss of space. I want to remove this. I want to do the following:

Image without deadspace

I manually deleted the white area around the image. But I want to do this automatically with the print command. It can be done? Also, if possible, will the name remain? Even if it is deleted, then everything is in order, but if the title can remain better.

+4
source share
1 answer

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:

Squeeze axes for only one axes

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:

builtin subplot

Removing its dead space:

 squeeze_axes(handles) 

squeeze axes

As an exercise, I give the case when you have axes that occupy more than one place in the grid.

+5
source

Source: https://habr.com/ru/post/1502446/


All Articles