本文含有多图,请注意流量消耗!
# 基本绘图函数
# plot
函数
绘制二维线图。
# 向量和矩阵数据
-
plot (X,Y) 创建 Y 中数据对 X 中对应值的二维线图。
要绘制由线段连接的一组坐标,请将 X 和 Y 指定为相同长度的向量。
要在同一组坐标区上绘制多组坐标,请将 X 或 Y 中的至少一个指定为矩阵。
-
plot (X,Y,LineSpec) 使用指定的线型、标记和颜色创建绘图。
有关 LineSpec
参数,参见本文 2.1 部分 ‘线型、标记和颜色’ 。
-
plot (X1,Y1,...,Xn,Yn) 在同一组坐标轴上绘制多对 x 和 y 坐标。此语法可替代将坐标指定为矩阵的形式。
-
plot (X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn) 可为每个 x-y 对组指定特定的线型、标记和颜色。您可以对某些 x-y 对组指定 LineSpec,而对其他对组省略它。例如,plot (X1,Y1,"o",X2,Y2) 对第一个 x-y 对组指定标记,但没有对第二个对组指定标记。
-
plot (Y) 绘制 Y 对一组隐式 x 坐标的图。
-
如果 Y 是向量,则 x 坐标范围从 1 到 length (Y)。
-
如果 Y 是矩阵,则对于 Y 中的每个列,图中包含一个对应的行。x 坐标的范围是从 1 到 Y 的行数。
-
如果 Y 包含复数,MATLAB 绘制 Y 的虚部对 Y 的实部的图。如果同时指定了 X 和 Y,虚部将被忽略。
-
-
plot (Y,LineSpec) 使用隐式 x 坐标绘制 Y,并指定线型、标记和颜色。
# 表数据
-
plot (tbl,xvar,yvar) 绘制表 tbl 中的变量 xvar 和 yvar。要绘制一个数据集,请为 xvar 指定一个变量,为 yvar 指定一个变量。要绘制多个数据集,请为 xvar、yvar 或两者指定多个变量。如果两个参量都指定多个变量,它们指定的变量数目必须相同。 (自 R2022a 起)
-
plot (tbl,yvar) 绘制表中的指定变量对表的行索引的图。如果该表是时间表,则绘制指定变量对时间表的行时间的图。 (自 R2022a 起)
# 其他选项
-
plot (ax,___) 在目标坐标区上显示绘图。将坐标区指定为上述任一语法中的第一个参量。
-
plot (___,Name,Value) 使用一个或多个名称 - 值参量指定 Line 属性。这些属性应用于绘制的所有线条。需要在上述任一语法中的所有参量之后指定名称 - 值参量。有关属性列表,请参阅 Line 属性。
-
p = plot (___) 返回一个 Line 对象或 Line 对象数组。创建绘图后,使用 p 修改该绘图的属性。有关属性列表,请参阅 Line 属性。
参见说明文档: plot。
常见用法举例:
- 画单个图像
X=[1:9]; | |
Y=[0.1:0.2:1.7]; | |
plot(X,Y); |
运行结果:
- 画多个图像
t=0:0.01:2*pi; | |
t=t.'; | |
x=[t,t,t]; | |
y=[sin(t),sin(2*t),sin(0.5*t)]; | |
plot(x,y); |
运行结果:
或者
x1=linspace(0,2*pi,10); | |
x2=linspace(0,2*pi,100); | |
x3=linspace(0,2*pi,200); | |
y1=sin(x1); | |
y2=sin(x2); | |
y3=sin(x3); | |
plot(x1,y1,x2,y2+2,x3,y3+4); |
运行结果:
- 指定线形,标记,颜色:
更改 x1
图像线型为蓝色虚线
x1=linspace(0,2*pi,10); | |
x2=linspace(0,2*pi,100); | |
x3=linspace(0,2*pi,200); | |
y1=sin(x1); | |
y2=sin(x2); | |
y3=sin(x3); | |
plot(x1,y1,':b',x2,y2+2,x3,y3+4); |
# fplot
函数
绘制表达式或函数,图线更平滑。
-
fplot (f) 在默认区间 [-5 5](对于 x)绘制由函数 y = f (x) 定义的曲线。
-
fplot (f,xinterval) 将在指定区间绘图。将区间指定为 [xmin xmax] 形式的二元素向量。
-
fplot (funx,funy) 在默认区间 [-5 5](对于 t)绘制由 x = funx (t) 和 y = funy (t) 定义的曲线。
-
fplot (funx,funy,tinterval) 将在指定区间绘图。将区间指定为 [tmin tmax] 形式的二元素向量。
-
fplot (___,LineSpec) 指定线型、标记符号和线条颜色。例如,'-r' 绘制一根红色线条。在上述语法中的任何输入参量组合后使用此选项。
-
fplot (___,Name,Value) 使用一个或多个名称 - 值对组参量指定线条属性。例如,'LineWidth',2 指定 2 磅的线宽。
-
fplot (ax,___) 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区 (gca) 中。指定坐标区作为第一个输入参量。
-
fp = fplot (___) 返回 FunctionLine 对象或 ParameterizedFunctionLine 对象,具体情况取决于输入。使用 fp 查询和修改特定线条的属性。有关属性列表,请参阅 Fu nctionLine 属性 或 ParameterizedFunctionLine 属性。
-
[x,y] = fplot (___) 返回函数的纵坐标和横坐标,而不创建绘图。在以后的版本中将会删除该语法。请改用线条对象 fp 的 XData 和 YData 属性。
参见说明文档: fplot。
常见用法示例:
- 绘制函数 在区间 的图像
fplot(@(x)sin(1/x),[0,0.2]); |
运行结果:
对比 plot
函数画出来的图像。
x=0:0.005:2; | |
y=@(x)sin(1./x); | |
plot(x,y(x)); |
运行结果:
可以看出由于 fplot
函数 “知道” 用户要画的函数图像,因此作出来的图与 plot
函数相比更加精准,且使用起来更方便(例如不用指定自变量精度)。
- 绘制参数方程图像,并指定线型
fplot(@(t)t.*sin(t),@(t)t.*cos(t),[0,10*pi],'-r'); |
运行结果:
# 其它坐标系的二维曲线:
# semilogx
函数
对数坐标图。
-
semilogx (X,Y) 在 x 轴上使用以 10 为底的对数刻度、在 y 轴上使用线性刻度来绘制 x 和 y 坐标。
-
要绘制由线段连接的一组坐标,请将 X 和 Y 指定为相同长度的向量。
-
要在同一组坐标区上绘制多组坐标,请将 X 或 Y 中的至少一个指定为矩阵。
-
-
semilogx (X,Y,LineSpec) 使用指定的线型、标记和颜色创建绘图。
参见说明文档: semilogx
x=logspace(-1,2); | |
y=x; |
可以看到,我们在输入参数的时候用的是对数坐标,而绘图的时候还是以普通坐标系来作图的。
# polarplot
函数
极坐标图。
- polarplot (theta,rho) 在极坐标中绘制线条,由 theta 表示弧度角,rho 表示每个点的半径值。输入必须为长度相等的向量或大小相等的矩阵。如果输入为矩阵,polarplot 将绘制 rho 的列对 theta 的列的图。也可以一个输入为向量,另一个为矩阵,但向量的长度必须与矩阵的一个维度相等。
示例
- polarplot (theta,rho,LineSpec) 设置线条的线型、标记符号和颜色。
参见说明文档: polarplot
theta=0:0.01:2*pi; | |
rho=sin(theta).*cos(theta); | |
polarplot(theta,rho); |
运行结果:
# bar
函数
条形图。
-
bar (y) 创建一个条形图,y 中的每个元素对应一个条形。
-
要绘制单个条形序列,请将 y 指定为长度为 m 的向量。这些条形沿 x 轴从 1 到 m 依次放置。
-
要绘制多个条形序列,请将 y 指定为矩阵,每个序列对应一列。
-
-
bar (x,y) 在 x 指定的位置绘制条形。
参见说明文档: bar
统计某个指标 2022 至 2024 三年间的数据,绘制条形图:
x = [2022:2024]; | |
y = [10,20;20,30;100,200]; | |
bar(x,y); |
运行结果:
若 bar
函数不指定参数 X
则默认的 X
序列为从 1
开始的自然数。
# histogram
函数
直方图
-
histogram (X) 基于 X 创建直方图。histogram 函数使用 ** 自动分 bin 算法 **,然后返回均匀宽度的 bin,这些 bin 可涵盖 X 中的元素范围并显示分布的基本形状。histogram 将 bin 显示为矩形条,这样每个矩形的高度就表示 bin 中的元素数量。
-
histogram (X,nbins) 指定 bin 的数量。
参见说明文档: histogram
对 1000 个随机数样本,绘制为一幅含有 25 个 bin 的直方图。
rng(2); | |
A=randn(1000); | |
nbin=25; | |
histogram(A,nbin); |
运行结果:
# pie
函数
饼状图。
-
pie (X) 使用 X 中的数据绘制饼图。饼图的每个扇区代表 X 中的一个元素。
-
如果 sum (X) ≤ 1,X 中的值直接指定饼图扇区的面积。如果 sum (X) < 1,pie 仅绘制部分饼图。
-
如果 sum (X) > 1,则 pie 通过 X/sum (X) 对值进行归一化,以确定饼图的每个扇区的面积。
-
如果 X 为 categorical 数据类型,则扇区对应于类别。每个扇区的面积是类别中的元素数除以 X 中的元素数的结果。
-
-
pie (X,explode) 将扇区从饼图偏移一定位置。explode 是一个由与 X 对应的零值和非零值组成的向量或矩阵。pie 函数仅将对应于 explode 中的非零元素的扇区偏移一定的位置。如果 X 为 categorical 数据类型,则 explode 可以是由对应于类别的零值和非零值组成的向量,或者是由要偏移的类别名称组成的元胞数组。
参见说明文档: pie
x=1:2:9; | |
pie(x); |
显然 sum (x)>1, 因此先对各元素归一化后再绘图。
运行结果:
# scatter
函数
散点图。
-
scatter (x,y) 在向量 x 和 y 指定的位置创建一个包含圆形标记的散点图。
-
要绘制一组坐标,请将 x 和 y 指定为等长向量。
-
要在同一组坐标区上绘制多组坐标,请将 x 或 y 中的至少一个指定为矩阵。
-
-
scatter (x,y,sz) 指定圆圈大小。要对所有圆使用相同的大小,请将 sz 指定为标量。要绘制不同大小的每个圆,请将 sz 指定为向量或矩阵。
-
scatter (x,y,sz,c) 指定圆颜色。您可以为所有圆指定一种颜色,也可以更改颜色。例如,您可以通过将 c 指定为 "red" 来绘制所有红色圆。
-
scatter (___,"filled") 填充圆。可将 "filled" 选项与上述语法中的任何输入参量组合一起使用。
-
scatter (___,mkr) 指定标记类型。
参见说明文档: scatter
t = 0:pi/50:2*pi; | |
X = 16*sin(t).^3; | |
y = 13*cos(t) - 5*cos(2*t) - 2*cos(3*t)- cos(4*t); | |
scatter(x,y,'red', "filled") |
运行结果:
# quiver
函数
矢量图。
-
quiver (X,Y,U,V) 在由 X 和 Y 指定的笛卡尔坐标上绘制具有定向分量 U 和 V 的箭头。例如,第一个箭头源于点 X (1) 和 Y (1),按 U (1) 水平延伸,按 V (1) 垂直延伸。默认情况下,quiver 函数缩放箭头长度,使其不重叠。
-
quiver (U,V) 在等距点上绘制箭头,箭头的定向分量由 U 和 V 指定。
-
如果 U 和 V 是向量,则箭头的 x 坐标范围是从 1 到 U 和 V 中的元素数,并且 y 坐标均为 1。
-
如果 U 和 V 是矩阵,则箭头的 x 坐标范围是从 1 到 U 和 V 中的列数,箭头的 y 坐标范围是从 1 到 U 和 V 中的行数。
-
参见说明文档: quiver
画一个由原点指向 (0,0)
的向量。
A=[4,5] | |
quiver(0,0,A(1),A(2)); |
运行结果:
# 图形属性的设置
# 线型、标记和颜色
指定包含符号的字符串标量或者字符向量。符号可以按任意顺序显示。例: “--or” 是带有圆形标记的红色虚线。
不需要同时指定所有三个特征。例如,如果忽略线型只指定标记,则绘图只显示标记不显示线条。
参见官方文档 LineSpec 参数
# 图形标注
函数名 | 作用 | 备注 |
---|---|---|
title (图像标题) | 图像标题,通过参数指定。 | 支持 |
xlabel (x 轴说明) | x 轴说明,通过参数指定。 | 支持 |
ylabel (y 轴说明) | y 轴说明,通过参数指定。 | 支持 |
text (x,y, 图形说明) | 在(x,y) 点处添加说明 | 支持 |
legend (图例 1, 图例 2,……) | 添加图例 | 无 |
# 坐标控制
# axis
函数
常见用法:
axis([xmin,xmax,ymin,ymax,zmin,zmax]); % 指定当前图像坐标区的范围 |
其他用法:
- axis equal:横纵坐标值采取等长刻度
- axis square:产生正方形坐标系(默认为矩形)
- axis auto:使用默认设置
- axis off:取消坐标轴
- axis on:显示坐标轴
# grid
命令
给坐标系加网格和边框
- grid on:显示网格线
- grid off:不显示网格线
默认无网格线。
绘制、、 的函数曲线并标注
x=linspace(0,2*pi,200); | |
y=[sin(x);sin(2*x);sin(x*0.5)]; | |
plot(x,y); % 绘图 | |
axis([0,7,-1.5,1.5]); % 选定坐标区间范围 | |
legend('sin x','sin 2x','sin x/2'); % 图例 | |
title("三个正弦函数y=sin{x}","FontSize",18); % 标题 | |
xlabel('x'); % x 轴标注 | |
ylabel('y'); % y 轴标注 | |
text(2.5,sin(2.5),'sin{x}'); % 在某点处标注 | |
text(2.5*2,sin(2*2.5),'sin{2x}');% 在某点处标注 |
运行结果:
# 图形保持
# hold
命令
- hold on:控制保持原有图形
- hold off:控制刷新图形窗口
- hold:在两种状态之间切换
使用 hold
命令绘制一个同心圆
t = linspace(0,2*pi,200); | |
x=sin(t); | |
y=cos(t); | |
plot(x,y,'-b'); | |
axis equal; | |
hold on; % 保持当前作出的图像不会被后面的绘图命令覆盖。 | |
x1=2*x; | |
y1=2*y; | |
plot(x1,y1,'-r'); |
运行结果: