plot制图是MATLAB最为简单也最为常用的制图函数,其工作原理为将两个一维数组一一对应后在坐标系上描点作图。本文将简要介绍如何使用plot函数以及其相关功能制作出一个符合自己要求的图窗。
一:仿真相关参数设置
1.基本仿真
t=0:0.01:2;
s1=sin(2pit);
s2=cos(2pit);
s3=2t-1;
2.拓展仿真
f0=100;
t=0.0625:0.0625:10;
t1=0.0625:0.0625:2.5;
t2=2.5625:0.0625:5;
t3=5.0625:0.0625:7.5;
t4=7.5625:0.0625:10;
s1=10sinc(2pit1);
s2=sin(2pif0t2);
s3=0.5t3-3;
s4=cos(2pif0t4).cos(2pif0t4);
s_all=[s1,s2,s3,s4];
二:plot制图的多图共图
1.plot函数内置共图
我们可以直接将多组对应数据输入到一个plot函数内实现共图,例如:输入plot(t,s1,t,s2),可得如下的图窗:
2.hold on共图
我们也可以应用hold on实现上面的功能,但要注意hold on要在所有制图函数的最上面,即:
hold on;
plot(t,s1);
plot(t,s2);
plot(t,s3);
得到的图窗为:
观察可以发现,利用hold on进行共图得到的图窗没有上边框与右边框,这也是其一大特点。
3.subplot函数
当为了实现多个图并列出现在一个图窗里时,我们可以使用subplot函数。其格式为:subplot(行数,列数,第几个图)
例如,我们输入:
subplot(2,1,1);
plot(t,s1);
subplot(2,1,2);
plot(t,s2);
会得到如下的图窗:
而当我们输入:
subplot(1,2,2);
plot(t,s1);
subplot(1,2,1);
plot(t,s2);
得到的图窗则是:
三:plot制图的线型,颜色,坐标点调节
1.线型调节
符号 | 线型 |
---|---|
— | 实线 |
: | 点状线 |
—. | 点画线 |
- - | 虚线 |
2.线条颜色调节
符号 | 颜色 |
---|---|
r | 红 |
y | 黄 |
b | 蓝 |
g | 绿 |
c | 青 |
b | 蓝 |
m | 品红 |
3.坐标点调节
符号 | 坐标点模式 |
---|---|
. | 实心点 |
+ | 十字 |
* | 星号 |
x | 叉号 |
o | 空心圈 |
s | 方块 |
d | 菱形 |
p | 五角星 |
h | 六角星 |
^ | 上三角 |
v | 下三角 |
< | 左三角 |
> | 右三角 |
4.实际应用
使用格式:plot(变量1,变量2,‘填入对应调节字符,可填多个’)
但要注意若单调节坐标点不调节线型的话,原线图会变成点状图
例如:
plot(t,s1,’-rp’,t,s2,’.k’,t,s3,‘mx’)
我们会得到:
四:线的粗细,颜色,坐标点大小细致调节
对于plot函数来说,线的粗细,具体的颜色,以及坐标点具体的大小可以根据自己的喜好来进行细致的调节,只需要修改相关参数就可以。
1.具体参数
粗细的细致调节——linewidth——大于0有限数值
颜色的细致调节——color——[R,G,B],三者分别介于0-1(三原色)
坐标点大小的细致调节——markersize——大于0有限数值
2.实际应用
例如我们输入:
hold on;
plot(t,s1,‘color’,[0.2,0.5,0.3],‘linewidth’,1.5);
plot(t,s2,’*’,‘markersize’,20);
我们会得到:
我们可以看到,第一个plot的线变粗了,同时颜色变为了一种墨绿色。
而第二个plot的图可以说是非常放飞自我了,这与我们把 markersize设为20这一比较大的数据有关。
五:图像基本信息与坐标限制(通用)
一幅好的图,除了线要画的漂亮,必要的标注与说明也是不可或缺的。不只对于plot函数来说,以下功能对别的作图函数也适用。
1.实际使用
plot(t,s1);
text(0.50,0.25,’\leftarrow 正弦函数截了点……’);
xlim([-1,2]);
ylim([-0.5,0.5]);
xlabel(‘t’);
ylabel(‘s1’);
title(‘the test’);
grid on;
据此,我们会得到如下图窗:
2.功能说明
A.text——标注文字
格式:text(x,y,‘标注文字与箭头’)
上述 (x,y)为要加标注的最左侧起始坐标
箭头函数 | 箭头 |
---|---|
\uparrow | 上箭头 |
\downarrow | 下箭头 |
\leftarrow | 左箭头 |
\rightarrow | 右箭头 |
使用时注意不要把箭头函数前面的\丢掉了
B.xlim,ylim——图窗坐标显示限制
格式:xlim([起始点,终止点])
C.xlabel,ylabel——横纵坐标量
格式:xlabel(‘需要显示的文字’)
D.title——图窗标题
格式:title(‘需要显示的文字’)
E.grid on——图窗加网格
格式:直接在制图函数后面加上grid on即可,和hold on用法类似
至于图例,个人认为利用生成好的图窗页面上的插入图例功能直接加比较方便。
六:plot3函数的图窗调节
plot3函数用于产生三维线图,其制图功能的调节方式与plot函数完全相同,例如我们输入:plot3(s1,s3,s2,‘sg’);
我们可以得到对应的绿色螺旋线方块点图:
七:拓展:分段函数线图与信号处理上的应用
注:此时数据重新定义,使用拓展仿真的数据
1.分段函数线图
对于plot函数来说,我们只要让两一维数组在不同区间上产生不同的对应方式即可实现分段函数的绘制。
例如我们输入:
f0=100;
t=0.0625:0.0625:10;
t1=0.0625:0.0625:2.5;
t2=2.5625:0.0625:5;
t3=5.0625:0.0625:7.5;
t4=7.5625:0.0625:10;
s1=10sinc(2pit1);
s2=sin(2pif0t2);
s3=0.5t3-3;
s4=cos(2pif0t4).cos(2pif0t4);
s_all=[s1,s2,s3,s4];
我们就将总函数分为了四段,第一段为Sa函数,第二段为正弦函数,第三段为一次函数,第四段为载波相干解调后的函数,并在最后利用矩阵组合生成总函数s_all
对应图像如下:
(取的样点较少,显得不是很平滑,以下也为此问题)
2.实际应用——2ASK信号调制(序列:10011010)
carry=cos(2pif0t);
signal=[ones(1,20),zeros(1,40),ones(1,40),zeros(1,20),ones(1,20),zeros(1,20)];
carry=carry.signal;
figure;
plot(t,carry);
图像如下:
当然如果不想像上面那样靠ones和zeros的不断组合生成调制函数的话,我们这里给出一种循环扩充的方式。
g=[1,0,0,1,1,0,1,0];
for n = 1:length(g)
h((1+20(n-1)):20n) = g(n)*ones(1,20);
x=1:length(h);
figure;
plot(x,h);
ylim([-1,2]);
其原理就是矩阵的扩充,即将原来的1位变为相同的20位,从而实现和较大采样率的载波函数进行数据上的对应。
图像为:
八:仿真总代码
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%图像测试准备%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t=0:0.01:2;
s1=sin(2*pi*t);
s2=cos(2*pi*t);
s3=2*t-1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%共图方式测试%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
plot(t,s1,t,s2); %函数内部设置
figure;
hold on;
plot(t,s1);
plot(t,s2); %hold on共图,hold on在最上面
plot(t,s3); %hold on不会有上边框与右边框
figure;
subplot(2,1,1); %subplot共图,(行数,列数,第几个)
plot(t,s1);
subplot(2,1,2);
plot(t,s2);
figure;
subplot(1,2,2);
plot(t,s1);
subplot(1,2,1);
plot(t,s2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%线型、点图、颜色调节%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
plot(t,s1,'-rp',t,s2,'.k',t,s3,'mx');
%若单调节坐标点不调节线型的话,原线图会变成点状图
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%图像细致参数调节%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
hold on;
plot(t,s1,'color',[0.2,0.5,0.3],'linewidth',1.5); %线图细致调节
plot(t,s2,'*','markersize',20); %点图细致调节
%%%%%%%%%%%%%%%%%%%%%%%%%%%图像基本信息与坐标限制%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
plot(t,s1);
text(0.50,0.25,'\leftarrow 正弦函数截了点……'); %标注添加(坐标,'文字')
xlim([-1,2]);
ylim([-0.5,0.5]); %坐标限制
xlabel('t');
ylabel('s1');
title('the test');
grid on; %网格添加
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%plot3三维线状图%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
plot3(s1,s3,s2,'sg'); %与plot调节一致
%%%%%%%%%%%%%%%%%%%%%%%%%%%%拓展:分段函数线图%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
f0=100;
t=0.0625:0.0625:10;
t1=0.0625:0.0625:2.5;
t2=2.5625:0.0625:5;
t3=5.0625:0.0625:7.5;
t4=7.5625:0.0625:10; %总横坐标与部分横坐标
s1=10*sinc(2*pi*t1); %一段:Sa函数
s2=sin(2*pi*f0*t2); %二段:正弦函数
s3=0.5*t3-3; %三段:一次函数
s4=cos(2*pi*f0*t4).*cos(2*pi*f0*t4); %四段:相干解调后的函数
s_all=[s1,s2,s3,s4]; %总纵坐标与部分纵坐标
figure;
plot(t,s_all);
%%%%%%%%%%%%%%%%%%%%%%%%拓展:分段在信号处理上的应用%%%%%%%%%%%%%%%%%%%%%%%%%
carry=cos(2*pi*f0*t); %载波生成
signal=[ones(1,20),zeros(1,40),ones(1,40),zeros(1,20),ones(1,20),zeros(1,20)];
%信号序列10011010
carry=carry.*signal;
figure;
plot(t,carry); %分段示例1:ASK调制信号
g=[1,0,0,1,1,0,1,0]; %分段示例2:方波信号的一种循环扩充方式
for n = 1:length(g)
h((1+20*(n-1)):20*n) = g(n)*ones(1,20); %循环扩充,1位变为20位
end
x=1:length(h); %横坐标对应
figure;
plot(x,h);
ylim([-1,2]);