Matlab画图命令整理(包括Print输出SCI论文高清大图!)

Matlab画图命令整理

    • 1、关于 gcf 和 gca
    • 2、画多个子图(subplot),以4个子图为例
    • 3、关于figure的一些设置命令整理
    • 4、关于坐标轴显示的设置
    • 5、imagesc函数画图
    • 6、Print输出高清图

参考的文章有:

1、matlab的图像操作——输出图像尺寸大小、坐标轴等各项设置
https://blog.csdn.net/misayaaaaa/article/details/53421221/

2、Matlab的图像操作——colorbar的各项细节操作
https://blog.csdn.net/misayaaaaa/article/details/53326395

3、Matlab多个子图Subplot位置排布
https://blog.csdn.net/qq_41492768/article/details/90209781

4、Matlab保存图像的5种方法
https://blog.csdn.net/Vipbinn/article/details/80963257?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

5、浅析image,imagesc,imshow的用法
https://blog.csdn.net/zhupananhui/article/details/16340345

6、Matlab作图语句小结
https://blog.csdn.net/qysh123/article/details/8783546

7、Matlab中的画图函数(可视化编程)
https://blog.csdn.net/daijingxin/article/details/78116975?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

如有侵权,请联系我删除,敬请谅解!

如代码有问题,请评论!

全部手码,自己整理,希望得到大家的鼓励!

最近在写论文,SCI需要300dpi以上的高清图(见第6部分用Print输出高清图),用matlab导出图的时候,碰到一些问题,就整理了一下,希望能帮助到大家。代码整理如下:

1、关于 gcf 和 gca

gcf = Current figure handle 当前图形的句柄

1
fig = gcf; % returns the current figure handle.

gca = Get handle to current axis. 获取当前图形坐标轴的句柄

1
2
3
H = gca; % returns the handle to the current axis in the current figure.
%          The current axis is the axis that graphics commands like PLOT, TITLE, SURF, etc. draw to if issued.    
%          Use the commands AXES or SUBPLOT to change the current axis to a different axis, or to create new ones.

2、画多个子图(subplot),以4个子图为例

在写论文的过程中,会涉及到多个图的情况,大致整理如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
figure,
subplot(2,2,1),plot(x,y1,y2,'linewidth',2);
%   subplot('position', [0.11 0.63 0.35 0.3]);   % [x0 y0 width height] 可以设置位置,一般默认即可
%   左下角为原点,横向为x,竖向为y
%   figure在画布中的位置由 ‘Position’, [x0 y0 Width Height] 设置

title('a'); %设置图标题
xlabel('{Time(s)}'),ylabel('{Slant range(km)}');    %X轴和Y轴名称,单位
legend('one','two');    %几个y对应legend括号里面几个元素,单个曲线不需要legend
axis([0 2 60 400]); %设置横纵坐标的范围,可不设置,默认
xticks(0:0.2:2); %这样x轴会每隔0.2显示一个刻度,可不设置,默认
yticks(60:20:400); %这样y轴会每隔20显示一个刻度,可不设置,默认
set(gca,'FontSize',20); %设置字体大小,20在PPT中比较合适,放在论文中一般8号就好了

subplot(2,2,2),plot(x2,y2); %后面的子图和前面一样
title('b');%设置图标题
% ...
subplot(2,2,3),plot(x3,y3);
title('c');%设置图标题
% ...
subplot(2,2,4),plot(x4,y4);
title('d');%设置图标题
% ...

3、关于figure的一些设置命令整理

设置曲线线宽、标记点大小,标记点边框颜色和标记点填充颜色等。
plot(…,’Property Name’, Property Value, …)

Property Name Property Value
LineWidth 线宽 数值,如0.5,1等,单位为points
MarkerEdgeColor 标记点边框线条颜色 颜色字符,如’g’, ’b’等
MarkerFaceColor 标记点内部区域填充颜色 颜色字符
MarkerSize 标记点大小 数值,单位为points

关于matlab中标尺,线宽,Marker,坐标轴,legend,字体等的一些设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set(findall(gcf,'type','hggroup'),'FontSize',16);  %%设置数据游标(标尺)的字体大小

set(findall(gcf,'type','line'),'linewidth',2);%%设置全部线宽为2,默认为0.5

set(findall(gcf,'type','line'),'markersize',10);%%设置marker的大小为10,默认为6

set(gca,'FontName','Times New Roman','FontSize',8,'LineWidth',1.0);%设置坐标轴的字体,字体大小,线宽

set(gca,'FontSize',20); %设置坐标轴字体大小为20
   
set(legend,'FontSize',8);   %设置legend的字体大小

set(gca,'xtick',[0:1000:5000]); %自定义x轴刻度间隔

set(gca,'ytick',[0.97:0.005:1]); %自定义y轴刻度间隔

4、关于坐标轴显示的设置

设置坐标轴上下限:axis([xmin,xmax,ymin,ymax]); 分别是x,y轴的上下限;
分坐标轴设置:

1
2
3
xlim([xmin,xmax]);  %对X轴设定显示范围
ylim([ymin,ymax]);  %对Y轴设定显示范围
zlim([zmin,zmax]);  %对Z轴设定显示范围

设定坐标轴范围和坐标轴显示内容:

1
2
set(gca,'xlim',[0,2],'xtick',[0:0.2:2]);    %x坐标轴范围,同时自定义x轴刻度间隔
set(gca,'ylim',[60,400],'ytick',[60:20:400]);   %y坐标轴范围,同时自定义y轴刻度间隔

如果需要另外定义这些刻度的名字,可以搭配xticklabels:

1
xticklabels({'a0','b10',c'30',...});

为说明效果,省略了部分内容,写代码时应该与xticks对应写够10+1个label。

5、imagesc函数画图

imagesc函数画图会出现y轴倒置的情况,即下大上小,set(gca,‘ydir’,‘normal’) 可以恢复正常。

1
2
3
4
5
6
7
8
9
[x1,y1] = size(z); %z为二维矩阵
x = (x1-1)./60;     %坐标转换,转换到自己需要的坐标
y = (y1-1)*7.5+60;  %坐标转换,转换到自己需要的坐标
imagesc(x,y,z.');   %根据实际情况是否加转置
set(gca,'ydir','normal');   %画出来y轴是从大到小的,需要用这条指令恢复正常
colorbar;colormap jet;   % colorbar颜色设置,从蓝到红
shading faceted;    % 不要平滑,根据实际画图需要
% shading interp;    %插值平滑
caxis([25,38]);     % colorbar标尺范围

关于shading

shading 是用来处理色彩效果的,分以下三种:

no shading 一般的默认模袭式 即shading faceted

shading flat 在faceted的基百础上去掉图上的网格线

shading interp 在flat的基础上进行色彩的插值处理,使色度彩平滑过渡

6、Print输出高清图

SCI的论文.jpg或者.tif需要300dpi以上的图像,怎么保存都不清楚,折腾我半天,问题包括莫名其妙变96dpi,300dpi图片宽度是6000像素,导致放word后压缩厉害。 直接用导出功能,300dpi或者600dpi无法设置图片大小,设置了也会被改(matlab 2016b,不知道是不是我matlab的问题)。现在整理如下:

print(figure_handle,fileformat,filename); % 其中的三个参数:
a、figure_handle: 图形句柄,如果图形窗口标题栏是“figure 3”,则句柄就是3;常用gcf获取当前窗口句柄

b、fileformat:单引号字符串,指定存储格式:
png格式: ‘-dpng’
jpeg格式: ‘-djpeg’,
tiff格式: ‘-dtiff’ (SCI论文推荐用这个)
bmp格式: ‘-dbitmap’
gif格式:’-dgif’
emf无损格式:’-dmeta’

c、 filename:文件名,可带路径,不设置就存当前文件夹

print保存高清图可以用如下4条指令之一即可实现。

路径记得需要改为自己的路径,即 'C:\Users\AgileDARN\Desktop\SuperDARN2019’需要改为自己的路径。

1
2
3
4
5
6
7
8
9
10
11
12
print(figure(3),'-dtiff', '-r300',strcat( 'C:\Users\AgileDARN\Desktop\SuperDARN2019\','Image.tif' ));
%保存到指定路径

print(gcf,'-dtiff','-r300','C:\Users\AgileDARN\Desktop\SuperDARN2019\Image');
%保存到指定路径

print -f3 -dtiff -r300 Image
% -f3对应的figure(3),-f1对应figure(1)
%保存到当前路径

print(gcf,'-dtiff','-r300','Image');
%保存到当前路径

导出SCI论文图,我用以下两条命令,首先设置图像大小手动,不然300dpi的图宽度会默认设置为6000像素,600dpi的是12000像素,图很大,放word还是会压缩,导致看不清,所以选择用set来设置手动。 word里面A4的大小是21cm,去除两边的变宽,一般宽度设置14cm,比如这个例子14cm*8.6cm,图的大小根据自己的实际情况设置。导出图的字体大小为8即可,如果看不清,是设置的不对!!!

1
2
set(gcf,'PaperUnits','centimeters','PaperPosition',[14 19 14 8.6],'PaperPositionMode', 'manual');
print(gcf,'-dtiff','-r300','C:\Users\AgileDARN\Desktop\SuperDARN2019\meteors2z');

如果图的字体不是8,用以下代码改一下。(是不是很贴心!)

1
2
set(gca,'FontSize',8); %设置坐标轴字体大小为8
set(legend,'FontSize',8);   %设置legend的字体大小为8

以下两张图是同一张图,看看以下对比:
a、fig里面的截图:
在这里插入图片描述b、tif图由于无法上传,也是截图。由于上面set改变了图的大小所以同样的字体看起来不一样。
在这里插入图片描述