Matlab is not saving the whole figure in epsc2 format

1 view (last 30 days)
Hi,
I am having trouble in saving a figure in epsc2 format. Looks like matlab cuts out part of the figure while saving the figure. Below is the code I am suing where I set figure size in inches and set the renderer to painters. Sometimes matlab saves the whole figure as intended but most of the time it cuts out a significant part of the figure. I use matlab on ubuntu m/c with nvidia driver. Below is the code I am using,
LineStyles = {'-c', '--m','-.r',':g','-+b','-oc','-s','-d','-^','-*'}; % 10 types total
LineStyles1 = {'oc', 'om','or','og','ob','oc','om','-d','-^','-*'}; % 10 types total
figWidth = 3; figheight = figWidth/1; formatEng = '-depsc2';
set(groot,'defaultFigurePaperPositionMode','manual');
figure(); set(gcf,'Renderer','painters');
set(gcf, 'PaperUnits', 'inches', 'PaperPosition', [0 0 figWidth figheight]);
hold all;
counter = 0;
for kk = 1:2:length(heightVec)
counter = counter + 1;
%plot(kx_fourier.*(BLH/z_i), fourier_spectra_u_frame(kk,:).*kx_fourier./ustar^2, LineStyles{counter});
plot(kx_fourier.*z_vec(heightVec(kk))/z_i, fourier_spectra_u_frame(kk,:).*kx_fourier./ustar^2, LineStyles{counter});
%plot(kwave.*(BLH/z_i), wavelet_spectra_u_frame(kk,:).*kwave./ustar^2,LineStyles1{counter});
plot(kwave.*z_vec(heightVec(kk))/z_i, wavelet_spectra_u_frame(kk,:).*kwave./ustar^2,LineStyles1{counter});
end
xlabel('$k_x z$','Interpreter','Latex','FontSize',10);
ylabel('$k_x E_{11}(k_x)u_*^{-2}$','Interpreter','Latex','FontSize',10);
%xlim([0.05 50]);
%ylim([8e-9 0.00004]);
xx = [0.3 19];
loglog(xx,xx.^(-2/3).*1,'LineWidth',2); % -2/3 slope
text(5, 0.45, '-2/3','FontSize',8);
set(gca,'XScale','log'); set(gca,'YScale','log');
SPR = sprintf('%s','wavelet_n_fourier_spectra_ek02_pre.eps');
set(gcf, 'Color', 'w');
print(SPR, formatEng);
Can you please suggest me a way to solve the problem. I tried to find a solution online but did not find a solution.
Attached is the output I get.
  1 Comment
mak
mak on 14 Apr 2017
I have found out a workaround. Not printing the figure to display solves the problem. So, basically, these two lines solve the problem.
fh = figure()
set(fh, 'Visible','off');

Sign in to comment.

Answers (1)

Saurabh Gupta
Saurabh Gupta on 12 Apr 2017
It is possible that print switches to OpenGL renderer for your figure, which causes this issue. You may want to specify the renderer for the print command to force it to use painters. This section of the documentation explains it.
"If you set the Renderer property for the figure, then print uses that renderer when generating output. Otherwise, print chooses the appropriate renderer. Typically, print uses the Painters renderer when generating vector graphics files. For some complex figures, print uses the OpenGL renderer instead. If it uses the OpenGL renderer, then the vector graphics file contains an embedded image, which might limit the extent to which you can edit the image in other applications. To ensure that print uses the Painters renderer, set the Renderer property for the figure to 'painters' or specify '-painters' as an input argument to print."

Categories

Find more on Object Containers in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!