目录

前言

一、基础知识

(一)绘制图形及坐标轴标题

(二)坐标轴范围

(三)常用线型、点形及颜色代号

(四)图例绘制

(五)自定义颜色数组

二、常用绘图

(一)二维热力图

(二)阴影误差折线图

(三)箱体图

(四)三维热力图

(五)三维密度图

总结

前言

        科研过程中,绘图是一项非常重要的技能,图画好了,科研工作就能事半功倍。本博客首先介绍了matlab中常用的绘图命令,之后介绍了几种常用的matlab二维以及三维绘图方法(对应资源可以在资源下载列表中获取),解释了各种图形的适用场景以及注意点。图形包括二维热力图、阴影误差折线图、箱体图、三维热力图和三维密度图,后续会持续更新更多的绘图技巧。

一、基础知识

        绘图命令主要由绘图函数来实现,每个绘图函数都有相应的属性,例如字体属性“Fontname”;字号属性“Fontsize”,颜色属性“Color”等,想实现某种绘图功能时,可以查找对应函数的属性进行定义,从而绘制想要的图形。

(一)绘制图形及坐标轴标题

        图形标题是指图的题目,坐标轴标题是指x、y、z轴的标题。“Fontsize”是指字体的大小,(‘Fontsize’,12)是指将标题的字号设置为12;“Fontname”是指字体的种类,(‘Fontname’,‘宋体’)是指将标题的字体种类设置为宋体。(注意程序中用的是单引号)

       将图形的标题设置为“标题1”,x、y、z轴的标题分别设置为“x”、“y”、“z” 。字号统一设置为12号,字体为“宋体”。代码如下(示例):

title('标题1',‘Fontsize’,12,‘Fontname’,‘宋体’);

xlabel('x',‘Fontsize’,12,‘Fontname’,‘宋体’);

ylabel('y',‘Fontsize’,12,‘Fontname’,‘宋体’);

zlabel('z',‘Fontsize’,12,‘Fontname’,‘宋体’);

(二)坐标轴范围

        绘图过程中常用到x、y、z轴范围限定的功能,通常用“xlim([a , b])”函数来实现,其中[a , b]数组表示坐标轴范围的上下限。将各个坐标轴的范围设为[0 , 1]。代码如下(示例):

xlim([0,1]);

ylim([0,1]);

zlim([0,1]);

(三)常用线型、点形及颜色代号

        matlab中常用线型、点型及颜色可以通过字母或者符号的形式来定义,具体的内容如表中所示:

线型 实线 虚线点画线双画线-:-.--颜色蓝绿红青品红黄色黑白bgrcmykw点型实心点十字空心圆星号上三角下三角左三角右三角.+o*^v<>方块五角星六角星菱形叉号sphdx

        绘制黑色虚线空心圆的图形,对应的代码为:

x = 1:100;

y = 2*x;

plot(x,y,'k:o');

(四)图例绘制

        图例的绘制用的函数为“legend()”函数,函数通用有字号属性“Fontsize”以及字体种类属性“Fontname”。同时,科研绘图中常常遇到中英文混合的问题,为了解决matlab中的中英文字体不同的问题,需要对中英文字体进行各自的定义;另外“Location”属性可以用来定义图例在图形中位置。

        假设需要绘制“种类1”的图例,图例字体大小为12,英文字体为“Times New Roman”,中文字体为“宋体”,图例位于图形的左上方。代码如下(示例):

legend({'\fontname{宋体}种类\fontname{Times New Roman}1'},Location="northwest");

legend('Fontsize',12);

%绘制指定的图例

leg = findobj(gca,'Tag','Box'); % add legend

legend([leg(1),leg(7),leg(13),leg(19)], ["a","b", "c","d"] );

(五)自定义颜色数组

        对于常用的绘图命令,基本都具有颜色“Color”的属性,属性后面需要定一个三维RGB数组,matlab中默认范围是0 ~ 1,但是网络上得到的数组的取值范围常常是0 ~ 255,因此需要对数组进行转换,才能使用定义的颜色。大家可以自己在网上找喜欢的颜色对图形进行定义。我自己常用的一组颜色数组为[122 027 109; 246 111 105; 21 151 165],矩阵中每一行代表一个RGB数组,实际使用过程中,需要除以255才可以正常使用。(后面会专门写一篇博客来记录好看的科研文章配色,也会更新相应的程序)

        假设绘制一个自定义颜色的图形。代码如下(示例):

x = 1:100;

y = 2*x;

color=[122 027 109]/255;

plot(x,y,'Color',color);

二、常用绘图

(一)二维热力图

        二维热力图主要可以通过颜色来表示数值的大小,十分直观;绘图用“surf()”函数实现,之后用view(2)对x-y平面进行观察,从而得到二维热力图,如果不用“view()”函数,则得到了三维热力图。

        代码如下(示例):

%数据准备

Z = zeros(101,101);%其中x为行,y为列

x=0:0.01:1;

y=0:0.01:1;

[X,Y] = meshgrid(x,y);

%定义z的值

%%%%自行填充代码%%%%%%%%

%绘图

figure(1);

s1=surf(X,Y,Z);

view(2);

cb=colorbar;

colormap(jet)%添加色条设置

shading flat; % 消除栅格线

s1.FaceColor='interp';

set(gca,'FontSize',14,'Fontname', 'Helvetica');

set(gca,'YTick',0:0.2:1,'YTicklabel',{'0','0.2','0.4','0.6','0.8','1'});

ylabel('y','FontSize',14);

xlabel('x','FontSize',14);

title('Exact');

(二)阴影误差折线图

        误差阴影折线图是用来体现数据变化范围的,阴影部分由数据最大值和最小值组成,并且阴影中间的折线位置代表数据的均值。此图可以很好的体现数据误差变化范围以及数据变化趋势,并且可以根据自己的喜好定义不同颜色以及阴影部分透明度;绘图用“shade()”函数实现,此函数为自定义函数。(可在资源中下载)

        部分代码如下(示例):

shade(x,y1_mean,errbar1,'lineprops',{'Color',color(1,:),'LineWidth',0.9,'MarkerFaceColor',[0 0.4470 0.7410]},'patchSaturation',0.65);

hold on;

shade(x,y2_mean,errbar2,'lineprops',{'Color',color(2,:),'LineWidth',0.9,'MarkerFaceColor',[0.8500 0.3250 0.0980]},'patchSaturation',0.65);

hold on;

shade(x,y3_mean,errbar3,'lineprops',{'Color',color(3,:),'LineWidth',0.9,'MarkerFaceColor',[0.9290 0.6940 0.1250]},'patchSaturation',0.65);

set (gca, 'FontSize', 14 );

xlabel('迭代次数','FontSize',14);

ylabel('Log(误差)','FontSize',14);

title('误差阴影折线图','FontSize',14);

(三)箱体图

        箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图,因形状如箱子而得名。箱线图的绘制方法是:先找出一组数据的上边缘、下边缘、中位数和两个四分位数;然后, 连接两个四分位数画出箱体;再将上边缘和下边缘与箱体相连接,中位数在箱体中间;绘图用“boxplot()”函数实现。(可在资源中下载)

        部分代码如下(示例):

box_1 = boxplot(data1,'positions',position_1,'colors',color1,'width',0.4,'symbol','+','outliersize',1);

set(box_1,'LineWidth',1.1);

hold on;

box_2 = boxplot(data2,'positions',position_2,'colors',color2,'width',0.4,'symbol','+','outliersize',5);

set(box_2,'LineWidth',1.1);

hold on;

box_3 = boxplot(data3,'positions',position_3,'colors',color3,'width',0.4,'symbol','+','outliersize',5);

set(box_3,'LineWidth',1.1);

hold on;

box_4 = boxplot(data4,'positions',position_4,'colors',color4,'width',0.4,'symbol','+','outliersize',5);

set(box_4,'LineWidth',1.1);

hold on;

set(gca,'XTick', [0 10 20 30 40 50 60 ],'XTickLabel', {'0' '1' '2' '3' '4' '5' '6' },'Fontsize',14);

xlim([0,70]);

ylim([10^-6,0.02]);

xlabel('迭代次数');

ylabel('Log(误差)');

set(gca,'Yscale','log');

leg = findobj(gca,'Tag','Box'); % add legend

legend([leg(1),leg(7),leg(13),leg(19)], ["a","b", "c","d"] );

(四)三维热力图

        三维热力图是用来在三维空间内绘制曲面的图形,曲面的颜色代表z轴值的大小,可以用来展示三维数据的变化。首先对x轴和y轴的数据进行网格化,要求x轴和y轴数据等长,一般为1*n维的数组;z轴的数据要求与网格数据一一对应,一般为n*n的矩阵;之后用“surf()”函数进行绘图操作。(可在资源中下载)

        部分代码如下(示例):

%绘图,逐点误差图

figure(1);

s1=surf(X,Y,z3);

colormap('Jet')%添加色条设置

s1.FaceColor='interp';

shading flat;

grid off;

(五)三维密度图

        三维密度图是用来展示四维数据的图形,x轴、y轴和z轴数据等长,一般为1*n维的数组,每个点的颜色代表数据值的大小;数据值矩阵为n*n*n维的矩阵;绘图用“scatter3()”函数实现。(可在资源中下载)

        部分代码如下(示例):

scatter3(x, y, z, 5, h, 'filled')

% hTitle = title('Density Scatter3');

hXLabel = xlabel('x');

hYLabel = ylabel('y');

hZLabel = zlabel('z');

set(gca,'FontSize',14);

总结

        以上就是今天要讲的内容,本文简单介绍了matlab中常用的绘图函数使用方法以及几种常见图形的绘制技巧。绘图是科研工作中非常关键的一步,好的图片可以提升文章档次,使得文章阅读起来更加直观便捷,因此掌握一些绘图技巧是十分必要的。绘图技能的学习是循序渐进的,最好的方法就是借鉴别人的程序转化为自己的知识,具体程序可在资源中下载,后续会持续更新更多的绘图技巧。

好文阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。