网上已有很多中方案输出,但都属于很旧的方案了,尽管有点仍然有效,查阅了很多资料以后发现,官网提供了一种极佳的方案(仅限Matlab R2020a以后版本),尽管此方案并没有exactly完成我想要的理想输出效果,但胜在是官方的方案,又快又好。

此处仅列举几个关键步骤,细节见官网链接。

例如我需要的学位论文中画一个15cm x 9.27cm的图。
绘图前:

% 一般默认figure画布大于出图大小,因此不必设置画布
% f = figure('Units','centimeters','Position',[0,0,15,9.27]);%后两个数为黄金分割比
% 有的地方推荐设置纸张大小,实践中发现没必要
% set(gcf,'paperunits','centimeters','paperposition',[0,0,7.5,9.27],'PaperPositionMode','manual');

t = tiledlayout(1,1,'Padding','tight'); %设置一个边界最紧的tile
t.Units = 'centimeters'; % 外边框单位是厘米
t.OuterPosition = [0,0,15,9.27]; % 外边框的长宽
nexttile; % 开始绘图

绘图中:(针对中文论文出图)

% 有几个必要参数,其他随意
%% 线宽2磅
p1 = plot(x,y);
p1.LineWidth = 2;

%% Label 字号10,字体Times New Roman
ax = gca;
ax.XLabel.String = 'Time (\circC)';
ax.XLabel.FontSize = 10;
ax.XLabel.FontName = 'Times New Roman';
ax.YLabel.String = 'Amplitude';
ax.YLabel.FontSize = 10;
ax.YLabel.FontName = 'Times New Roman';

%% Axis ticklabel 字号10,字体Times New Roman
ax.FontSize = 10;
ax.FontName = 'Times New Roman';

%% Legend 字号10,字体Times New Roman
lgd = legend('This is a legend');
lgd.NumColumns = 2; % 竖版变横版,2为legend个数
lgd.Box = 'off'; % 非必要
lgd.FontSize = 10;
lgd.FontName = 'Times New Roman';

绘图后:

exportgraphics(t,'name.pdf','ContentType','vector','BackgroundColor','none');%输出矢量pdf图片
% exportgraphics(gca,'peaks.png','Resolution',300);%输出分辨率为300的PNG图片

缺点:exportgraphics会对你画的图去除所有白边,因此即使你开了一个15cm x 9.27cm的tile外边界,最终pdf给你的只有14.96 × 9.25 cm;若你开了一个7.5cm x 9.27cm的tile外边界,最终pdf给你的只有7.17 × 9.14 cm,所以这个方案并不严谨,但聊胜于无。

Last modification:February 23, 2022
If you think my article is useful to you, please feel free to appreciate