MATLAB出图高质量

使用命令print,进行打印或者图像保存。

详见MATLAB帮助文件,print。

语句格式:

print 
print('argument1','argument2')
print(handle,'filename')
print argument1 argument2 ... argumentn

filename不包含扩展名。
-ddriver打印驱动器类型,可以默认。
-dformat文件保存的格式:pdf:dpdf,png:-dpng,emf:-dmeat,tiff:-dtiffordtiffn,tiff eps预览格式:-tiff
-dformat filename 保存的格式和文件名
-rnumber:分辨率,默认90simulink,150figure,压缩是为864。
-zbuffer:文件压缩格式,还有-opengl-painters

有关出图大小的问题,参见printing and exporting use cases。

  1. 确定纸张的尺寸
    set(gcf,'PaperUnits','centimeters');
    set(gcf,'PaperSize',[17.5 12.5]);

  2. 将图片放置于纸张中间
    1)设置纸张的单位。
    set(gcf,'PaperUnits','inches')
    2)返回目前纸张的大小。
    papersize=get(gcf,'PaperSize')
    3)初始化图片的大小。
    width=5.5;
    height=3;
    4)计算水平居中放置时的坐标。
    left=(papersize(1)-width)/2
    bottom=(papersize(2)-height)/2
    5)设置图片尺寸并输出。
    myfiguresize=[left,bottom,width,height];
    set(gcf,'PaperPosition',myfiguresize);
    print

个人出图案例:
对比两种特征提取方法结合六种机器学习算法训练集和测试集准确率。

代码:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Function:小论文判别结果对比图,双柱形图绘制
% Author:Yang
% Time:2018-4-5
% Software: Matlab 2014a
% 输出格式tif,宽度20cm,高度16cm,分辨率为600dpi。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% I.清空环境变量
clear all
%close all
clc

%% II.载入数据
%输入数据
data_pca=[95.17 95;92.17 97;87.33 96;90.17 97;90 96;88.52 95];
data_spa=[96.67 94.5;92.67 96.5;90 97;90.5 97.5;90.33 97.5;88.17 96.9];
data_train=[data_pca(:,1) data_spa(:,1)];
data_test=[data_pca(:,2) data_spa(:,2)];
method=['DT  ';'KNN ';'NB  ';'LDA ';'SVM ';'BPNN']; %方法标签


%% III. 设置图片格式
figure1 = figure;
set (gcf,'Position',[400,100,1000,800],'Color',[1 1 1]); %显示图片在屏幕中的起始点和长宽,背景颜色为白色。

%% III-1. 设置子图1
subplot1=subplot(2,1,1,'Position',[0.09 0.57 0.88 0.42]); % 设置图片的摆放位置,尽可能占满,参数需要手动试验,坐标位置为比率。

% 绘制条形图1
h1=barh(data_train,1); %绘制横向的条形图
set(gca,'LineWidth',1); %设置坐标轴线的宽度
set(gca,'YTicklabel',method); %将纵坐标设置为方法名称
set(gca,'XTicklabel',{'85%','90%','95%','100%'});%横坐标设置为准确率%
set(gca,'FontSize',10); %坐标轴字体为10号
axis([85 100 0.5 6.5]); %坐标轴量程范围

xlabel('Accurcay of training set','Fontsize',11); %横坐标标签
ylabel('Statistic learning method','Fontsize',11); %纵坐标标签
set(h1(1),'LineWidth',1); %设置柱形图线宽,与图例legend相关联,此为柱子1
set(h1(2),'LineWidth',1); %设置柱形图线宽,与图例legend相关联,此为柱子2
legend1=legend('PCA','SPA'); %图例的标签设置
set(legend1,'EdgeColor',[1 1 1]); %去掉图例的边框,设置与背景色相同
set(legend1,'Fontsize',10); %设置图例字体大小
for i=1:6
    text(data_train(i,1)+0.2,i-0.18,strcat(num2str(data_train(i,1)),'%'),'FontSize',10); %为柱子加标签,显示其数值,带%
    text(data_train(i,2)+0.2,i+0.18,strcat(num2str(data_train(i,2)),'%'),'FontSize',10); %为柱子加标签,显示其数值,带%
end

%颜色设置,RBG颜色模型,范围[0,1]
cm=[
   [1 0 1]
   [0 1 0]
    ];
colormap(cm);

%% III-2. 设置子图2
subplot2=subplot(2,1,2,'Position',[0.09 0.07 0.88 0.42]);
h2=barh(data_test,1);

set(h2(1),'LineWidth',1);% 设置柱形图线宽,与图例legend相关联
set(h2(2),'LineWidth',1);
set(gca,'LineWidth',1); 
set(gca,'YTicklabel',method);set(gca,'FontSize',10);set(gca,'YTick',[1:6]);
set(gca,'XTicklabel',{'85%','90%','95%','100%'});set(gca,'FontSize',10);
axis([85 100 0.5 6.5]);
xlabel('Accurcay of test set','fontsize',10);
ylabel('Statistic learning method','fontsize',10);
for j=1:6
    text(data_test(j,1)+0.2,j-0.18,strcat(num2str(data_test(j,1)),'%'),'FontSize',10);
    text(data_test(j,2)+0.2,j+0.18,strcat(num2str(data_test(j,2)),'%'),'FontSize',10);
end


%颜色设置
cm=[
   [1 0 1]
   [0 1 0]
   ];
colormap(cm);

text('Parent',subplot1,'String','(a)','Position',[83.5 6.4 0],'FontSize',12);
text('Parent',subplot2,'String','(b)','Position',[83.5 6.4 0],'FontSize',12);


%% VI.结果保存和输出
% 主要根据设置的图的大小确定,默认状态下好像为20cm宽,与figure没有太多关系。

% %设置纸张尺寸
% set(gcf,'PaperUnits','centimeters');
% set(gcf,'PaperSize',[15 12]);


%设置纸张的单位。
set(gcf,'PaperUnits','centimeters');
%返回目前纸张的大小。
papersize=get(gcf,'PaperSize');
%初始化图片的大小。
width=20;
height=16;
%计算水平居中放置时的坐标。
left=(papersize(1)-width)/2;
bottom=(papersize(2)-height)/2;
%设置图片尺寸并输出。
myfiguresize=[left,bottom,width,height];
set(gcf,'PaperPosition',myfiguresize);

%输出
print  -zbuffer -r600 -dtiff figure7; % 压缩格式,分辨率,保存格式,文件名
savefig('figure7.fig');

结果图:


tiff结果图

由于字体和布局,显示的fig格式线条会细小一些,之前手动设置和输出时设置的线条宽为2。如下图:


fig输出图

就大部分论文结果而言,训练集的结果会比测试集的要高,然而我的则相反。有关训练集结果输出的问题,我很想听听有经验的人的指点。因为每种方法的过程不太一样,我所采用的是利用训练集样本重新进行了预测,然后输出结果,这样的方法是一种回判,不知道能不能用来评估模型的效果。

你可能感兴趣的:(MATLAB出图高质量)