2D绘图基础
函数 plot(x,y)
- 调用前需要做的事情,限定横坐标x的范围与纵坐标y的值:
例如:
x 的限定属于[初值:增值:终值]
添加标签:xlabel
和ylabel
函数
>> x=[0:0.1:10];
>> y=cos(x);
>> plot(x,y),xlabel('x'),ylabel('y')
>>
函数fplot()
相比前面的函数,fplot()
函数能够针对的函数更多,函数的分辨率有matlab自主选择,省去了增量
注意:在进行指数函数与三角函数进行相乘或除的运算时,不使用(*
),而使用(.*
),以后涉及到与三角函数进行计算时,都应该考虑到这一点,比如(.^
)
当一个函数是由二个或更多个函数相乘构成,别忘记在相乘时加上“.”
以便告诉MATLAB 我们是对两个矩阵进行相乘。
>> fplot('exp(-2*t)*sin(t)',[0,5]),xlabel('x轴'),ylabel('y轴'),title('fplot函数测试')
警告: 以后的版本中将会删除 fplot 的字符输入。请改用 fplot(@(t)exp(-2.*t).*sin(t))。
> In fplot (line 105)
>> fplot(@exp(-2*t).*sin(t),[0,5]),xlabel('x轴'),ylabel('y轴'),title('fplot函数测试')
fplot(@exp(-2*t).*sin(t),[0,5]),xlabel('x轴'),ylabel('y轴'),title('fplot函数测试')
↑
错误: 圆括号或方括号不对称或异常。
>> fplot(@(t)exp(-2*t).*sin(t),[0,5]),xlabel('x轴'),ylabel('y轴'),title('fplot函数测试')
>>
对图像的更多修饰
(1)增加网格与调整坐标轴
- 增加网格
grid on
- 调整坐标轴:
axis square
产生正方形图像;axis equal
产生两个坐标轴等比例和间距都相同的图像
注意:tanh() 才是真正的 tan() 图形:
>> x= [-6:0.1:6];
>> y = tanh(x);
>> plot(x,y),grid on,axis equal
(2)在同一个图像中显示多个函数
- 在同一个图像中显示多个函数
以此为例:f(t) = e^-t
和g(t) = e^-2t
显示在同一图像之中
>> t = [0:0.01:6];
>> ft = exp(-t);
>> gt = exp(-2*t);
>> plot(t,ft,'-',t,gt,'--')
》 实线 '-'
》 虚线 '--'
》 虚点线 '-.'
》 点线 ':'
(3)添加图例和设置颜色
- 添加图例
legend()
函数 - 设置颜色:
》单独使用时,直接在plot()
中加'r'
(红色)和'b'
(蓝色)等。
》与线条样式一起使用时,'r:'
或者'b--'
》白色 w;黑色 k;蓝色 b;红色 r;青色 c;绿色 g;洋红 m;蓝色 y
>> t = [0:0.01:6];
>> ft = exp(-t);
>> gt = exp(-2*t);
>> plot(t,ft,':','r',t,gt,'-.','b'),xlabel('x'),ylabel('y'),legend('exp(-t)',' exp(-2*t)')
(4)设置坐标比例
- 设置坐标比例
axis ( [xmin xmax ymin ymax] )
同样直接接到plot()
函数后面
>> t = [0:0.01:6];
>> ft = exp(-t);
>> gt = exp(-2*t);
>> plot(t,ft,'r:',t,gt,'b-.'),xlabel('x'),ylabel('y'),legend('exp(-t)',' exp(-2*t)'),axis([0 5 -1 1])
(5)子图——subplot(m, n, p)
一个图像中呈现多个图像,subplot(m, n, p)
m 表示 创建的行数,n 表示 创建的列数,p 表示 将子图贴到某个已经创建好的图形窗口上
创建顺序是:
(1)subplot 先分配窗口。
(2)再使用 plot 函数在此窗口创建的函数的图像。
>> x =[0:0.01:5];
>> y = exp(-1.2*x).*sin(20*x);
>> subplot(1,2,1);
>> plot(x,y),xlabel('x'),ylabel('exp(-1.2*x).*sin(20*x)'),axis([0 5 -1 1]);
>> y = exp(-1.2*x).*sin(20*x);
>> subplot(1,2,2);
>> plot(x,y),xlabel('x'),ylabel('exp(-1.2*x).*sin(20*x)'),axis([0 5 -1 1])
>>
(6)图像重叠hold on
和linspace
命令
linspace(a,b)
表示,在a,b之间均匀的分布100个点
linspace(a,b,n)
表示,在a,b之间均匀的分布n个点
可以先使用linspace
确定需要看得函数的大致位置,再用axis([])
固定
此时已经有一个函数在图像上了,再使用 hold on
,再进行 第二个plot()
>> x = linspace(0,2*pi);
>> plot(x,cos(x)),axis([0 2*pi -1 1]);
>> hold on
>> plot(x,sin(x)),axis([0 2*pi -1 1])
>>
(7)极坐标与对数对象
polar(theta,r)函数
——极坐标产生
plot
函数能使用的功能,该函数同样适用;
>> theta = [0:pi/90:2*pi];
>> a = 2;
>> r = a*theta;
>> polar(theta,r,'r-.'),title('阿基米德螺线')
- 对数图像
即 将坐标轴使用log
对数的形式进行给出,可以在数据集很小的状态下看清楚曲线的走向
(1)—— loglog()
函数(两个坐标轴都以对数表示)
绘制一个频谱图时,关于 一般使用 拉普拉斯变换 S=iw
(或者jw
),规定频率取值范围为 ω 的范围为1≤ω≤100 rad/s
,公式
绘制这种频谱图
>> RC = 0.25;
>> s = [1:100]*i;
>> F = abs(1./(1+RC*s));
>> loglog(imag(s),F),grid,xlabel('频率(rad/s)'),ylabel('输出/输出比'),title('频率响应')
>>
(2)——semilogx(x, y)
,semilogy(x, y)
选择一个 轴 以对数显示,而另外一个则以直接值形式显示
>> x=[0:20];
>> y = exp(-10*x.^2);
>> semilogy(x,y,'r-.'),title('exp(-10*x^2)'),xlabel('x'),ylabel('y'),grid
>>
(8)离散数据绘图(折线等)
那种折线图、条形图等的绘制
- 折线图——步骤:
>> x = [1:5];
>> y=[50,69,70,89,91];
>> >> plot(x,y,'*',x,y),set(gca,'XTicklabel',['x1';'x2';'x3';'x4';'x5']),...
set(gca,'XTick',[1:5]),axis([1 5 0 100]),xlabel('学生'),ylabel('分数')
- 条形图
bar(x,y)
>> x = [1:5];
>> y=[50,69,70,89,91];
bar(x,y),xlabel('学生'),ylabel('分数'),title('显示')
- 针头图
stem(t,f)
这里如果范围很广,增量尽量大一些,不然针头会很密集
>> t = [0:5:200];
>> f = exp(-0.01*t).*sin(t/4);
>> stem(t,f),xlabel('时间/s'),ylabel('响应')
(9)等高线图
[x,y]=meshgrid(-5:0.1:5,-3:0.1:3)
一个函数同时限定区域与增量contour(x,y,z)
绘制等高线
>> [x,y]=meshgrid(-5:0.5:5,-3:0.1:3);
>> z = cos(x).*sin(y);
>> [C,h]=contour(x,y,z);
>> set(h,'ShowText','on','TextStep',get(h,'Levelstep')*2)
>>
- 绘制三维等高线
>> [x,y]=meshgrid(-2:0.1:2);
>> z = y.*exp(-x.^2-y.^2);
>> contour(x,y,z),xlabel('x'),ylabel('y'); //图一
>> contour3(x,y,z,30);//图2
>> surface(x,y,z,'EdgeColor',[.8 .8 .8],'FaceColor','none');//图3
>> grid off
>> view(-15,20);//图4
surface()
函数用于装饰
view()
函数就是调整可视角度
(10)三维图像
mesh(x,y,z)
函数进行三维图像创建
>> [x,y] = meshgrid(-2*pi:0.1:2*pi);
>> z = cos(x).*sin(y);
>> mesh(x,y,z),xlabel('x'),ylabel('y'),zlabel('z');
>> [x,y] = meshgrid(-2:0.1:2);
>> z = y.*exp(-(x.^2+y.^2));
>> mesh(x,y,z),xlabel('x'),ylabel('y'),zlabel('z');//图1
>> surf(x,y,z),xlabel('x'),ylabel('y'),zlabel('z');//图2,修饰
>> surfc(x,y,z),xlabel('x'),ylabel('y'),zlabel('z');//图3,修饰
>>> surfl(x,y,z),xlabel('x'),ylabel('y'),zlabel('z');
>> shading interp;
>> colormap(gray);//图4
surf
函数让图像带渐变色
surfc
函数让图像下方留下投影
surfl
函数设置一个光照表面,产生一个没有线条的三维图像
使用shading
设置阴影为flat
、interp
和faceted
。
flat
是用同一颜色为每个网格进行着色并隐藏网格线;
facted
则显示网格;
interp
是告诉MATLAB 使用颜色插值的办法进行着色,因此显得非常平滑
colormap()
函数设置颜色
图1
图2
图3
图4
线性系统的补充
针对非线性时不变系统、线性时变系统,可以使用 matlab 的 ode45函数(具体见help)