中国大学MOOC 科学计算与MATLAB语言(点击此处跳转)
4.1 二维曲线
plot函数
(1)plot(x)
- 当 x 为实数向量时,则分别以该向量元素的下标和数值为横、纵坐标绘制出一条曲线。
- 当 x 为复数向量时,则分别以该向量元素的实部和虚部为横、纵坐标绘制出一条曲线。
复型向量的构建可以用 cx = x + y * i 构建,也可以用 cx = complex(x, y) 构建。
(2)plot(x, y)
- 当 x 和 y 为长度相同的向量时,x 和 y 分别用于存储 x 坐标和 y 坐标数据。
- 当 x 是向量,y 是矩阵时
- 如果矩阵 y 的列数等于 x 的长度,则以向量 x 为横坐标,以 y 的每个行向量为纵坐标绘制曲线,曲线的条数等于 y 的行数。
- 如果矩阵 y 的行数等于 x 的长度,则以向量 x 为横坐标,以 y 的每个列向量为纵坐标绘制曲线,曲线的条数等于 y 的列数。
- 当 x 和 y 是同型矩阵时,以 x 和 y 对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
>> t=0:0.01:2*pi;
>> t1=t';
>> x=[t1, t1, t1];
>> y=[sin(t1), sin(2*t1), sin(0.5*t1)];
>> plot(x,y)
(3)含多个输入参数的plot函数
plot(x1, y1, x2, y2, …, xn, yn)
其中,每一向量对构成一组数据点的横、纵坐标,绘制一条曲线。
%采用不同个数的数据点绘制正弦函数曲线,观察曲线形态
>> t1=linspace(0, 2*pi, 10);
>> t2=linspace(0, 2*pi, 20);
>> t3=linspace(0, 2*pi, 100);
>> plot(t1, sin(t1), t2,sin(t2)+1, ...
t3, sin(t3)+2)
(4)含选项的plot函数
plot(x, y, 选项)
其中,选项用于指定曲线的线型、颜色和数据点标记。
线型 | 颜色 | 数据点标记 |
---|---|---|
"-":实线 | "r":红色 | "*":星号 |
":":虚线 | "g":绿色 | "o":圆圈 |
"-.":点划线 | "b":蓝色 | "s":方块 |
"--":双划线 | "w":白色 | "p":五角星 |
"k":黑色 | "^":朝上三角符号 | |
\(\cdots\) | \(\cdots\) |
x=(0:pi/50:2*pi)';
y1=2*exp(-0.5*x)*[1,-1];
y2=2*exp(-0.5*x).*sin(2*pi*x);
x1=0:0.5:6;
y3=2*exp(-0.5*x1).*sin(2*pi*x1);
plot(x, y1, 'k:', x, y2, 'b--', x1, y3, 'rp')
fplot函数
使用plot函数绘图时,先要取得x、y坐标,然后再绘制曲线,x往往采取等间隔采样。在实际应用中,函数随着自变量的变化趋势未知,或者在不同区间函数频率特性差别大,此时使用plot函数绘制图形,如果自变量的采样间隔设置不合理,则无法反映函数的变化趋势。
(1)fplot函数的基本用法
fplot(f, lims, 选项)
其中,f代表一个函数,通常采用函数句柄的形式。lims为x轴的取值范围,用二元向量[xmin,xmax]描述,默认值为[-5, 5]。选项定义与plot函数相同。
%采用fplot函数绘制函数sin(1/x)
>> fplot(@(x) sin(1./x),[0,0.2], 'b')
(2)双输入函数参数的用法
fplot(funx, funy, tlims, 选项)
其中,funx、funy代表函数,通常采用函数句柄的形式。tlims为参数函数funx和funy的自变量的取值范围,用二元向量[tmin,tmax]描述。
%已知螺旋线的参数方程,绘制曲线
>> fplot(@(t)t.*sin(t), @(t)t.*cos(t), [0,10*pi], 'r')
4.2 绘制图形的辅助操作
图形标注
图形标注支持LaTeX格式控制符
(1)title函数
- title(图形标题)
%双层标题
>> title({'MATLAB', 'y=sin(x)'})
- title(图形标题, 属性名, 属性值)
%Color属性:用于设置图形标题文本的颜色
>> title('y=cos{\omega}t', 'Color','r')
%FontSize属性:用于设置标题文字的字号
>> title('y=cos{\omega}t','FontSize',24)
(2)xlabel函数和ylabel函数
- xlabel(x轴说明)
- ylabel(y轴说明)
(3)text函数和gtext函数
- text(x, y, 说明)
>> text(-2*pi, 0, '-2{\pi}')
>> text(3, 0.28, '\leftarrow sin(x)')
- gtext(说明)
在图形中用鼠标指定文字说明的位置
(4)legend函数
- legend(图例1, 图例2, …)
>> x = linspace(0, 2*pi, 100);
>> plot(x, [sin(x); sin(2*x); sin(3*x)])
>> legend('sin(x)', 'sin(2x)', 'sin(3x)')
坐标控制
(1)axis函数
axis([xmin,xmax,ymin,ymax,zmin,zmax])
其他用法 | 函数说明 |
---|---|
axis equal | 纵、横坐标轴采用等长刻度 |
axis square | 产生正方形坐标系(默认为矩形) |
axis auto | 使用默认设置 |
axis off | 取消坐标轴 |
axis on | 显示坐标轴 |
(2)grid函数
函数 | 说明 |
---|---|
grid on | 显示坐标系网格 |
grid off | 取消坐标系网格 |
grid | 在两种状态间进行切换 |
(3)box函数
函数 | 说明 |
---|---|
box on | 显示坐标系边框 |
box off | 取消坐标系边框 |
box | 在两种状态间进行切换 |
图形保持
函数 | 说明 |
---|---|
hold on | 在原有图形上继续绘制 |
hold off | 覆盖原有图形进行绘制 |
hold | 在两种状态间进行切换 |
图形窗口的分割
subplot(m, n, p)
其中,m和n指定将图形窗口分成m×n个绘图区,p指定当前活动区。
x=linspace(0,2*pi,60);
subplot(2,2,1)
plot(x,sin(x)-1);
title('sin(x)-1');axis ([0,2*pi,-2,0])
subplot(2,1,2)
plot(x,cos(x)+1);
title('cos(x)+1');axis ([0,2*pi,0,2])
subplot(4,4,3)
plot(x,tan(x));
title('tan(x)');axis ([0,2*pi,-40,40])
subplot(4,4,8)
plot(x,cot(x));
title('cot(x)');axis ([0,2*pi,-35,35])
4.3 其他形式的二维曲线
其他坐标系下的二维曲线图
(1)对数坐标图
semilogx(x1, y1, 选项1, x2, y2, 选项2, …)
semilogy(x1, y1, 选项1, x2, y2, 选项2, …)
loglog(x1, y1, 选项1, x2, y2, 选项2, …)
其中,semilogx函数x轴为常用对数刻度,y轴为线性刻度;semilogy函数x轴为线性刻度,y轴为常用对数刻度;loglog函数x轴和y轴均采用常用对数刻度。
(2)极坐标图
polar(theta, rho, 选项)
其中,theta为极角,rho为极径,选项的内容与plot函数相同。
统计图
(1)条形图
函数 | 说明 |
---|---|
bar函数 | 绘制垂直条形图 |
barh函数 | 绘制水平条形图 |
bar(y,style)
其中,参数y是数据,选项style用于指定分组排列模式。
y=[1,2,3,4,5; 1,2,1,2,1; 5,4,3,2,1];
subplot(1,2,1)
bar(y)
title('Group')
subplot(1,2,2)
bar(y, 'stacked')
title('Stack')
style | 说明 |
---|---|
grouped | 簇状分组 |
stacked | 堆积分组 |
bar(x, y,style)
其中,x存储横坐标,y存储数据,y的行数必须与向量x的长度相同。选项style用于指定分组排列模式。
x=[2015,2016,2017];
y=[68,80,115,98,102;
75,88,102,99,110;
81,86,125,105,115];
bar(x, y)
title('Group');
(2)直方图
函数 | 说明 |
---|---|
hist函数 | 绘制直角坐标系下的直方图 |
rose函数 | 绘制极坐标系下的直方图 |
hist(y)
hist(y, x)
其中,y是要统计的数据,x用于指定区间的划分方式。若x是标量,则统计区间均分成x个小区间;若x是向量,则向量x中的每一个数指定分组中心值,元素的个数为数据分组数。x缺省时,默认按10个等分区间进行统计。
%绘制服从高斯分布的直方图
y=randn(500,1);
subplot(2,1,1);
hist(y);
title('高斯分布直方图');
subplot(2,1,2);
x=-3:0.2:3;
hist(y,x);
title('指定区间中心点的直方图')
rose(theta[,x])
其中,参数theta用于确定每一区间与原点的角度,选项x用于指定区间的划分方式。
%绘制高斯分布数据在极坐标下的直方图
y=randn(500,1);
theta=y*pi;
rose(theta)
title('在极坐标下的直方图')
(3)面积类图形
函数 | 说明 |
---|---|
pie函数 | 绘制扇形图 |
area函数 | 绘制面积图 |
pie(x, explode)
其中,参数x存储待统计数据,选项explode控制图块的显示模式。
%某次考试优秀、良好、中等、及格、不及格的人数分别为:5、17、23、9、4,试用扇形统计图作成绩统计分析
score = [5, 17, 23, 9, 4];
ex = [0,0,0,0,1];
pie(score, ex)
legend('优秀', '良好', '中等', '及格', ...
'不及格', 'location', 'eastoutside')
说明:'location'用于指定图例位置, 'eastoutside'表示图例放在绘图区域右边的外侧。
area函数的用法与plot函数相同,只是将所得曲线下方的区域填充颜色。
(4)散点类图形
函数 | 说明 |
---|---|
scatter函数 | 绘制散点图 |
stairs函数 | 绘制阶梯图 |
stem函数 | 绘制杆图 |
三个函数的用法与plot函数相似,下面以scatter函数为例,说明这类函数的用法。
scatter(x, y, 选项, 'filled')
其中,x、y用于定位数据点,选项用于指定线型、颜色、数据点标记。如果数据点标记是封闭图形,可以用选项‘filled’指定填充数据点标记。该选项省略时,数据点是空心的。
%以散点图形式绘制桃心曲线
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,'rd','filled')
矢量图形
函数 | 说明 |
---|---|
compass函数 | 绘制罗盘图 |
feather函数 | 绘制羽毛图 |
quiver函数 | 绘制箭头图 |
三个函数的用法与plot函数相似,下面以quiver函数为例,说明矢量类图形绘制函数的用法。
quiver(x, y, u, v)
其中,(x, y)指定矢量起点,(u, v)指定矢量终点。x、y、u、v是同样大小的向量或同型矩阵,若省略x、y,则在x-y平面上均匀取若干个点作为起点。
%已知向量A、B,求A+B,并用矢量图表示。
A=[4,5]; B=[-10,0]; C=A+B;
hold on;
quiver(0, 0, A(1), A(2));
quiver(0, 0, B(1), B(2));
quiver(0, 0, C(1), C(2));
text(A(1),A(2),'A');text(B(1),B(2),'B');
text(C(1),C(2),'C');
axis ([-12, 6, -1, 6])
grid on
4.4 三维曲线
plot3函数
(1)plot3(X, Y, Z)
- 参数X、Y、Z为长度相同的向量时,组成一组曲线的坐标。
- 参数X、Y、Z中有向量,也有矩阵时,向量的长度应与矩阵相符。
- 参数X、Y、Z是同型矩阵时,以X、Y、Z对应列元素绘制曲线,曲线条数等于矩阵列数。
%在空间不同位置绘制5条正弦曲线。
t=0:0.01:2*pi;
t=t';
x=[t, t, t, t, t];
y=[sin(t), sin(t)+1, sin(t)+2, sin(t)+3, sin(t)+4];
z=t;
plot3(x,y,z)
%这个例子也可以采用以下代码实现。
t=0:0.01:2*pi;
x=t;
y=[sin(t); sin(t)+1; sin(t)+2; sin(t)+3; sin(t)+4];
z=t;
plot3(x,y,z)
(2)含多组输入参数的plot3函数
plot3(x1, y1, z1, x2, y2, z2, …, xn, yn, zn)
每一组x、y、z向量构成一组数据点的坐标,绘制一条曲线。
%绘制三条不同长度的正弦曲线。
t1=0:0.01:1.5*pi;
t2=0:0.01:2*pi;
t3=0:0.01:3*pi;
plot3(t1,sin(t1),t1, t2,sin(t2)+1,t2, ...
t3,sin(t3)+2,t3)
(3)含选项的plot3函数
plot3(x, y, z, 选项)
选项用于指定曲线的线型、颜色和数据点标记。
t=0:pi/50:6*pi;
x=cos(t);
y=sin(t);
z=2*t;
plot3(x,y,z,'p')
xlabel('X'),ylabel('Y'),zlabel('Z');
grid on
fplot3函数
fplot3(funx, funy, funz, tlims)
其中,funx、funy、funz代表定义曲线x、y、z坐标的函数,通常采用函数句柄的形式。tlims为参数函数自变量的取值范围,用二元向量[tmin, tmax]描述,默认为[-5, 5]。
%绘制墨西哥帽顶曲线
xt = @(t) exp(-t/10).*sin(5*t);
yt = @(t) exp(-t/10).*cos(5*t);
zt = @(t) t;
fplot3(xt, yt, zt, [-12, 12], 'r-.')
4.5 三维曲面
平面网格数据的生成
用矩阵X、Y分别存储每一个小矩形顶点的x坐标与y坐标,矩阵X、Y就是该矩形区域的xy平面网格坐标矩阵。
在MATLAB中,产生平面区域内的网格坐标矩阵有两种方法。
(1)利用矩阵运算生成
>> x = 2:6;
>> y = (3:8)';
>> X = ones(size(y))*x;
>> Y = y*ones(size(x));
(2)利用meshgrid函数生成
[X,Y]=meshgrid(x,y)
其中,参数x、y为向量,存储网格点坐标的X、Y为矩阵。
>> x = 2:1:6;
>> y = (3:1:8)';
>> [X, Y] = meshgrid(x, y);
绘制三维曲面的函数
mesh(x, y, z, c)
surf(x, y, z, c)
其中,x、y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的曲面颜色。c省略时,颜色的设定正比于图形的高度。
t = -2:0.2:2;
[X, Y] = meshgrid(t);
Z = X .* exp(-X.^2 - Y.^2);
subplot(1,3,1)
mesh(X,Y,Z);
subplot(1,3,2)
surf(X,Y,Z);
subplot(1,3,3)
plot3(X,Y,Z);
grid on
mesh函数和surf函数的其他调用格式:
mesh(z, c)
surf(z, c)
当x、y省略时,z矩阵的第2维下标当作x轴坐标,z矩阵的第1维下标当作y轴坐标。
>> t = 1:5;
>> z= [0.5*t; 2*t; 3*t];
>> mesh(z);
函数 | 解释 |
---|---|
meshc | 带等高线的三维网格曲面函数 |
meshz | 带底座的三维网格曲面函数 |
surfc | 具有等高线的曲面函数 |
surfl | 具有光照效果的曲面函数 |
[x,y]=meshgrid(0:0.1:2,1:0.1:3);
z=(x-1).^2+(y-2).^2-1;
subplot(2,2,1);
meshc(x,y,z);title('meshc(x,y,z)')
subplot(2,2,2);
meshz(x,y,z);title('meshz(x,y,z)')
subplot(2,2,3);
surfc(x,y,z);title('surfc(x,y,z)')
subplot(2,2,4);
surfl(x,y,z); title('surfl(x,y,z)')
标准三维曲面
(1)sphere函数
[x,y,z]=sphere(n)
产生3个(n+1)阶的方阵,采用这3个矩阵可以绘制出圆心位于原点、半径为1的单位球体。参数n决定了球面的圆滑程度默认值为20。
(2)cylinder函数
[x,y,z]=cylinder(R, n)
其中,参数R是一个向量,存放柱面各个等间隔高度上的半径,n表示在圆柱圆周上有n个间隔点,默认有20个间隔点。
默认生成准线为圆心位于原点,半径为1的单位圆,底面高度为0,顶面高度为1的柱面。
%用cylinder函数分别绘制柱面、花瓶和圆锥面
subplot(1,3,1);
[x,y,z]=cylinder;
surf(x,y,z);
subplot(1,3,2);
t=linspace(0,2*pi,40);
[x,y,z]= cylinder(2+cos(t),30);
surf(x,y,z);
subplot(1,3,3);
[x,y,z]= cylinder(0:0.2:2,30);
surf(x,y,z);
%用cylinder函数绘制两个相互垂直且直径相等的圆柱面的相交图形
[x,y,z]= cylinder(1,60);
z=[-1*z(2,:);z(2,:)];
surf(x,y,z)
hold on
surf(y,z,x)
axis equal
(3)peaks函数
多峰函数:
peaks函数可以用来生成绘图数据矩阵,矩阵元素由上面列出的表达式在矩形区域x方向-3到3,y方向也是-3到3的等分网格点上的函数值确定。
用peaks函数生成的矩阵可以作为mesh、surf等函数的参数,而绘制出多峰函数曲面图。
函数 | 说明 | 举例 |
---|---|---|
peaks(n) | 通常参数为1个标量生成n阶的方阵 | p1=peaks(10);分别沿x和y方向将区间-3到3等分成9份,生成一个10阶方阵p1 |
peaks(V) | 若参数为向量,则将向量代入到上面的表达式,计算得到高度矩阵 | p3=peaks(-3:0.2:3);参数为1个有31个元素的行向量,生成一个31阶方阵p3 |
peaks(x,y) | 若参数为矩阵,则将网格坐标矩阵代入到上面的表达式,计算得到高度矩阵 | [x,y]=meshgrid(-2:0.1:2, 0:0.1:5); p4=peaks(x,y);参数为2个同型矩阵,将生成一个与x、y同型的矩阵p4 |
peaks | 若无输出参数,则默认的等分数是48生成49阶的方阵,并直接绘制出多峰函数曲面图 | p2=peaks;p2赋值为peaks将生成一个49阶的方阵p2 |
fmesh函数和fsurf函数
用于绘制参数方程定义的曲面
fsurf(funx, funy, funz, uvlims)
fmesh(funx, funy, funz, uvlims)
其中,funx、funy、funz代表定义曲面x、y、z坐标的函数,通常采用函数句柄的形式。uvlims为funx、funy和funz的自变量的取值范围,用4元向量[umin, umax, vmin, vmax]描述 ,默认为[-5, 5, -5, 5]。
绘制螺旋曲面
\[\left\{ \begin{array}{l} x=u{\rm sin}v \\ y=-u{\rm cos}v \\ z=v \end{array} \right. -5<u<5,-5<v<2 \]funx = @(u,v) u.*sin(v);
funy = @(u,v) -u.*cos(v);
funz = @(u,v) v;
fsurf(funx,funy,funz,[-5 5 -5 -2])
hold on
fmesh(funx,funy,funz,[-5 5 -2 2])
hold off
4.6 图形修饰处理
视点处理
方位角:视点与原点连线在xy平面上的投影与y轴负方向形成的角度,正值表示逆时针,负值表示顺时针。
仰角:视点与原点连线与xy平面的夹角,正值表示视点在xy平面上方,负值表示视点在xy平面下方。
(1)view函数的基本用法
view(az,el)
其中,az为方位角,el为仰角。系统默认的视点定义为方位角-37.5°,仰角30°。
%绘制函数z=(
标签:函数,矩阵,绘图,matlab,图形,pi,绘制,sin,MATLAB
From: https://www.cnblogs.com/YuukiAsuna/p/17089457.html