最近更新了不少关于数学建模算法与机器学习的博客,今天我来写写关于科研制图的MATLAB常用命令,众所周知,在未来的科研生涯中,只要是学工科的同学们,MATLAB都是大家必学的工具之一,而发paper中的制图更是重中之重,虽然科研制图讲究一个**“丑”**,但是不会画想必是不行的。本文应该是持续更新的,本博客我会总结一些较为细节处理的代码,如果你是个使用MATLAB科研制图的小白,我会强烈推荐b站郭彦甫的MATLAB入门教程,是我特别推荐的视屏系列。当然现在python科研制图也十分流行了,之后我也会整理。
清屏、清除所有变量
我有个习惯就是每个主程序的开头我都会清除所有变量以及进行清屏操作,这个习惯我个人认为还是防止我们代码重复运行的有效办法。
clear,clc % clear清除所有变量,clc清屏
在同一坐标系下绘制多条曲线
这依然是个十分基础的问题,我们可以使用hold on
命令,这个命令在matlab中就是继续使用当前坐标轴的意思,与之对应的是hold off
。当然大部分时候,后半部分命令可以不用写,下面我们以
为例,进行图的绘制。
clear,clc
x = linspace(0,20,1000); % linspace(a,b,k)表示在区间[a,b]中任取k个点
y1 = 2*cos(x);
y2 = sin(2*x);
y3 = 3*sin(x);
figure(1); % 其实可以不写,代表图画框1,但是通常为了标记图像,我一般都会这样写
plot(x,y1);
hold on % 只需要一个hold on就可以了
plot(x,y2);
plot(x,y3);
绘制效果如下图所示:
在不同坐标系下绘制曲线,同框显示
相信学过的人都知道,这种情况我们一般使用subplot
这样的命令,subplot(a,b,k)
命令一般出现于每个plot
命令前,代表的意思是绘制a*b的框图,目前绘制第k个图(顺序从上至下,从左至右),比如我们实现以下代码会发生什么情况?
clear,clc
x = linspace(0,20,1000);
y1 = 2*cos(x);
y2 = sin(2*x);
y3 = 3*sin(x);
% figure 1: 2*3
figure(1);
subplot(2,3,1); plot(x,y1);
subplot(2,3,2); plot(x,y2);
subplot(2,3,3); plot(x,y3);
subplot(2,3,4); plot(x,y1);
subplot(2,3,5); plot(x,y2);
subplot(2,3,6); plot(x,y3);
% figure 2: 3*2
figure(2);
subplot(3,2,1); plot(x,y1);
subplot(3,2,2); plot(x,y2);
subplot(3,2,3); plot(x,y3);
subplot(3,2,4); plot(x,y1);
subplot(3,2,5); plot(x,y2);
subplot(3,2,6); plot(x,y3);
绘制效果如下图所示:
开启坐标轴网格
在我们绘图的时候这样白色的界面实际上真的非常影响我们的对于数据分布情况的总结,于是我们想在坐标轴中添加相应的分割线,采用grid on
命令即可。
clear,clc
x = linspace(0,20,1000);
y1 = 2*cos(x);
y2 = sin(2*x);
y3 = 3*sin(x);
figure(1);
plot(x,y1);
hold on
plot(x,y2);
plot(x,y3);
grid on
效果如下图所示:
改变曲线颜色,设置线宽
在我们绘图的时候设置曲线的颜色同样重要,如果我们不设置的话,matlab会给所有曲线默认的颜色排列,以及宽度(默认1)。然而,事实上我们知道,通常我们并不适合他给的颜色以及默认线宽有些太细了。先来说说,matlab如何调整曲线颜色以及坐标点的问题,大家可参考博客:Matlab画图常用的符号和颜色
同样我们其实还有其他方法调整颜色,我们知道颜色的表示都是使用三维向量RGB表示,所以我们可以调整参数,来调整曲线的特殊颜色,如深红浅红等等。先上代码:
clear,clc
x = linspace(0,20,1000);
y1 = 2*cos(x);
y2 = sin(2*x);
y3 = 3*sin(x);
figure(1);
plot(x,y1,'k','LineWidth',1.5); % 黑色线性曲线,曲线宽度为1.5,我通常使用的线宽
hold on
plot(x,y2,'Color',[0.7 0 0],'LineWidth',1.5); % RGB的R为0.7即深红
plot(x,y3,'b:','LineWidth',1.5); % 蓝色虚线的曲线
grid on
效果图如下:
设置坐标轴、标题与图例
最后一个基础的命令,就是设置坐标轴与图例。这两个命令都十分简单,分别使用xlabel('x轴名称')
与legend('第1条曲线名称','第2条曲线名称','第3条曲线名称')
。当然也可以这样设置y轴,z轴都没问题。关于标题的设置,title
命令就能搞定,但是matlab往往不支持中文的格式,也就是说如果你在标题、坐标轴或图例中出现中文,往往会引发乱码。我在网上找到了一个比较不错的办法,就是添加一条命令set(gca,'Fontname','Monospaced','Fontsize',10,'FontWeight','bold');
便可解决无法用中文命令标题的问题,当然你使用英文就不需要这行命令了。btw,所有matlab的文字部分都支持的是latex语法。
clear,clc
x = linspace(0,20,1000);
y1 = 2*cos(x);
y2 = sin(2*x);
y3 = 3*sin(x);
figure(1);
plot(x,y1,'k','LineWidth',1.5); % 黑色线性曲线,曲线宽度为1.5,我通常使用的线宽
hold on
plot(x,y2,'Color',[0.7 0 0],'LineWidth',1.5); % RGB的R为0.7即深红
plot(x,y3,'b:','LineWidth',1.5); % 蓝色虚线的曲线
grid on
xlabel('x'); ylabel('y');
legend('y_1','y_2','y_3');
set(gca,'Fontname','Monospaced','Fontsize',10,'FontWeight','bold');
title('例子:xsim y_1,y_2,y_3');
效果图如下图所示: