Search code examples
matlabmatlab-figure

Axis labels are cut off when saving MATLAB figure


Consider the following MWE with produces a figure:

clear 
close all

fig1 = figure(1);
set(gca,'xscale','log')
set(gca,'yscale','log')
xlabel('Frequency (Hz)')
ylabel('Amplitude (dB)')
set(gca,'FontUnits','points',...
'FontWeight','normal',...
'FontSize',10,...
'FontName','Times',...
 'Units','normalized');

PaperW = 16;
PaperH = 7.5;
fig1.Units = 'centimeters';
fig1.Position = [20 10 PaperW PaperH];
fig1.PaperUnits = 'centimeters';
fig1.PaperPosition = [0 0 PaperW PaperH];

print(fig1,'fig1.png','-dpng','-r300')

I'm trying to save this as a .png file using print. Additionally, I want the saved image to be 16cm by 7.5cm. I specified this using PaperW and PaperH (the width and height).

The problem is, the bottom of the xlabel text is cut off. Why is this happening? And how can I solve this problem?

enter image description here

Zoomed in on the xlabel. Notice how the bottom of the q and y are cut off.

enter image description here


Solution

  • You can tinker around the position of the axis as follows,

    % get axis position, move up the y co-ordinate by just little bit and offset the height by the same amount
    pos = get(gca, 'Position');
    set(gca, 'Position', [pos(1) pos(2)+0.05 pos(3) pos(4)-0.05]);