以下内容为个人笔记,部分图片来源于郭老师课件或课程截图。 笔记汇总:MATLAB基础教程 课程视频:MATLAB基础教程-台大郭彦甫(14课全-高清-含课件)
基础绘图¶
plot() 基本使用¶

plot(x,y):如果 X 和 Y 都是向量,则它们的长度必须相同,plot 函数绘制 Y 对 X 的图;- 如果 X 和 Y 均为矩阵,则它们的大小必须相同,plot 函数绘制 Y 的列对 X 的列的图(即矩阵X的第1列的数据记为一个vector:x1,Y的第一列记为一个vector:y1,plot(x1, y2),第2, 3, 4…列类似。将对应的每一列绘制成一个单独的线条)。如:

- 如果 X 或 Y 中的一个是向量而另一个是矩阵,则矩阵的各维中必须有一维与向量的长度相等。如果矩阵的列宽等于向量长度,则 plot 函数绘制矩阵中的每一列对向量的图。如果矩阵的行宽等于向量长度,则该函数绘制矩阵中的每一行对向量的图。如果矩阵为方阵,则该函数绘制每一列对向量的图。
通常都会使矩阵的行宽等于向量长度,从而一次画多图,如:

plot(x, y1, x, y2):同时画两条线;plot(y):分别以x=1,2,3….对应于y的第1,2,3…个数值描点连线(即自动为y配置x坐标);- 使用
hold on保持上一次画图,使用hold off来关闭此功能, 不使用hold off画图将一直存在
plot() 描点、连线¶
plot(X,Y,LineSpec)设置线型、标记符号和颜色LIneSpec的内容可以包含三个参数,~~第一个表示颜色,第二个表示连线的类型,第三个表示描点的类型(误)~~,事实上这三个参数的顺序无关紧要;plot(x,y,'b--o')即表示使用蓝色虚线,带圆形标记画图; 各类型对应表示如下:
plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn)设置每个线条的线型、标记符号和颜色. 可以混用 X、Y、LineSpec 三元组和 X、Y 对组:例如plot(X1,Y1,X2,Y2,LineSpec2,X3,Y3)
legend() 添加图例¶
- 添加图例,参数内容与画图时
plot()的参数内容一一对应;
- 也可以在画图时添加图例:
plot(x,y,'DisplayName','cos(x)')固定参数DisplayName(可省略) 后的cos(x)即是为该曲线添加的图例说明; - 为图例指定其他参数:

- 图例位置参数对应的参数:

添加标题与坐标轴¶

- title():为图添加标题;
- suptitle() 在一个 figure 中画多个子图时,添加一个大标题;
- xlabel()、ylabel()、zlabel():为 x y z 轴添加题注;
注意诸如
\pie^{-x}这样的写法,使得公式显示的更漂亮
在图中添加文本说明¶

-
line():绘制基本线条. 在课件的这段代码中,
line()的第一个参数是 x 坐标,第二个参数是 y 坐标. 按照这两个向量连线画图; 其实效果与plot差不多,基本的使用也与plot一样:
-
text():为数据点添加文本说明. 在课件中是使用
text()结合 latex 语法在图中添加公式说明. 如课件截图中的标识,需要在 latex 语法前后添加$$,以字符串的形式记入一个 string 变量 str 中;text()前两个参数是说明在图中的起始位置,第3个参数是 latex 语句字符串,后两个是使用 latex 语法添加说明时的固有格式. 如果只是向图中添加普通文本说明,而非特殊语法(如latex语法),则不需要最后两个参数.
text() 还有很多不同用法,可以为图添加非常漂亮的说明,可以查看 text()的官方文档,但就画图的出发点而言,其他的各种效果均可以通过截图添加文本实现,如此更加方便.
Annotation(lineType, x, y):创建一个在当前图窗中的两个点之间延伸的线条或箭头注释。 将lineType指定为line(线条)、arrow(箭头) 或doublearrow(双向箭头). 将 x 和 y 分别指定为[x_begin, x_end]和[y_begin, y_end]形式的二元素向量.
获取图像的相关 handle 更改图像属性¶
### 图像的属性
画出的一个图主要包括 Figure Axes Line 三个 Object

-
通过
h = plot(x,y)可以使h得到画出图形中 Line 的 handle (类似于file id),以后便可以通过 h 来改变 Line 的一些属性;gcf、gca也类似 -
比如像下面这样利用
gca来改变 Axes,即数轴的属性: 如图所示,set()、xlim()两种方式均可以改变数轴的范围
-
从 R2014b 开始,matlab 已经支持类似 sturct 的圆点法来设置属性: 下属代码可以达到一样的效果,(此方法严格遵守大小写,
g.xlim不可行)
g = gca;
g.XLim = [0, 2*pi];
g.YLim = [-1.2, 1.2];
设置数轴的字体与刻度¶

-
set(gca, 'fontsize', 25):可以将数轴上的字体设置为25号大小; -
set(gca, 'xtick'……)与set(gca, 'xticklabel'….)配合使用,前者xtick用于在数轴上对应的点处标出刻度,后者xticklabel在标出的刻度上对应地指定一个标签; 课件中的例子即为:在x=0,pi/2,pi,3pi/2,2pi处标出刻度,然后以 0, 90, 180, 270, 360 对应地写上数轴; -
从 R2014b 开始,matlab 已经支持类似 sturct 的圆点法来设置属性:
g = gca;
g.FontSize = 25;
g.Xtick = 0:pi/2:2*pi; g.XtickLabel = 0:90:360;
g.Xtick = 0:pi/2:2*pi; g.XtickLabel = {'0', '\pi/2', '\pi', '3\pi/2', '2\pi'};
-
xtickangle(angle):将当前坐标区的 x 轴刻度标签旋转到指定角度(以度为单位),其中 0 表示水平。指定正值表示逆时针旋转,负值表示顺时针旋转;
xtickangle(ax,angle):旋转 ax 指定的坐标区的刻度标签,而不是旋转当前坐标区的刻度标签; -
x轴用时间表示:

课件中的第三例,预期在x轴上标出 0, π/2….:
但貌似较新版本的 matlab 已经无法实现(2016b以及以上不再支持 symbol ).
我利用与第二例类似的方法:
set(gca,'xtick',0:pi/2:2*pi);
set(gca,'xticklabel',{'0','\pi/2','\pi','3\pi/2','2\pi'});
得到了不错的效果:

更改线条属性¶

- delete(h):将画好的图形清除;
- 使用圆点法完成上图实例

描点属性¶
描出好看的点:

plot()有多个可选参数,这是常见的几个 Line属性 :
- 由于需要所画图形的光滑性,对x的取值一般比较密集,这样一来对点的标记效果可能不理想,此时可以使用
MarkerIndices参数选择性地标记部分点: x 实际上是一个 1×100 的向量,如果每一点都做标记,呈现的是一连串标记而非曲线,如图所示设置标记点1:5:length(y),每5个数据点做一个标记,即能达到预期效果
多图多 Figure¶

- 在画图前加上 figure 指令,然后
plot()将创建第一个视窗 Figure1,第二次画图前若再加上figure 再 plot,则将创建第二个视窗 Figure2,前一个视窗依然在; - 还可以使用
h = figure(1)创建一个编号为 1 的 Figure,并获得它的 handle,便可在有多个 Figure 时,利用h来设置编号为 1 的 Figure 的相关属性; - 需要注意的是,画多图后,“当前窗口”指的是最新创建的视窗,所以 gca、gcf 这些指令所做出的操作,结果均作用于最新创建的视窗;
多图多 Figure¶

- subplot(m,n,p) 将当前图窗划分为 m×n 网格,并在 p 指定的位置创建坐标区。按行号对子图位置进行编号. 第一个子图是第一行的第一列,第二个子图是第一行的第二列,依此类推. 如果指定的位置已存在坐标区,则此命令会将该坐标区设为当前坐标区;
subplot(2,2,[3,4]):连接 3、4 两个位置画一个长图;- 自定义子图的位置:

- 创建一个包含多个子图的图窗,将每一个子图的 Axes 存入变量中,但不画图。所有子图创建完后再定位到目标子图,画图并进行更多个性化操作:

图像个性化操作¶

- grid on/off:使网格可见或不可见 box on/off:使盒子可见或不可见(即数轴左方和上方的边框) axis on/off:使数轴可见或不可见
保存绘图¶
-
saveas(fig,filename):将
fig指定的图窗保存到 filename 文件中。务必加上文件扩展名,例如myplot.jpg,如果不指定扩展名,则saveas()默认将图窗保存为 FIG 文件; -
要保存当前图窗,请将
fig指定为gcf,一般使用: .png 保存为位图,.svg 保存为矢量图,两种格式均可用于word
saveas(gcf, 'filename.png');
saveas(gcf, 'filename.svg');
saveas(gcf, 'filename.pdf');
print(fig,filename):与saveas()使用基本一致。print()应该会更加强大一些。目前浅度使用,二者均可;
print(gcf, 'filename.svg') 保存的 .svg 格式图片 word 无法显示。
练习¶

clear all;
close all;
t=linspace(1,2);
f=t.^2;
g=sin(2*pi*t);
p=plot(t,f,'b',t,g,'ro');
legend({'t^{2}','sin(2\pi t)'},'location','best');
title('Mini Assignment #1');
xlabel('Time (ms)');
ylabel('f(t)');

clear all;
close all;
t=linspace(1,2);
f=t.^2;
g=sin(2*pi*t);
p=plot(t,f,'b',t,g,'ro');
legend({'t^{2}','sin(2\pi t)'},'location','best');
title('Mini Assignment #1');
xlabel('Time (ms)');
ylabel('f(t)');
%==============以上均为练习1的代码==============%
%=========只需修改练习1图的一些属性即可==========%
p(1).Color='k';
p(1).LineWidth=3;
p(2).MarkerEdgeColor='m';
p(2).MarkerFaceColor='#7E2F8E';
p(2).MarkerSize=4;
g=gca;
g.FontSize=15