首页 > 其他分享 >「matlab学习笔记」MATLAB绘图

「matlab学习笔记」MATLAB绘图

时间:2023-02-23 21:25:21浏览次数:45  
标签:函数 矩阵 绘图 matlab 图形 pi 绘制 sin MATLAB

中国大学MOOC 科学计算与MATLAB语言(点击此处跳转)

MATLAB官方文档(点击此处跳转)

4.1 二维曲线

plot函数

(1)plot(x)

  1. 当 x 为实数向量时,则分别以该向量元素的下标和数值为横、纵坐标绘制出一条曲线。
  2. 当 x 为复数向量时,则分别以该向量元素的实部和虚部为横、纵坐标绘制出一条曲线。

复型向量的构建可以用 cx = x + y * i 构建,也可以用 cx = complex(x, y) 构建。


(2)plot(x, y)

  1. 当 x 和 y 为长度相同的向量时,x 和 y 分别用于存储 x 坐标和 y 坐标数据。
  2. 当 x 是向量,y 是矩阵时
  • 如果矩阵 y 的列数等于 x 的长度,则以向量 x 为横坐标,以 y 的每个行向量为纵坐标绘制曲线,曲线的条数等于 y 的行数。
  • 如果矩阵 y 的行数等于 x 的长度,则以向量 x 为横坐标,以 y 的每个列向量为纵坐标绘制曲线,曲线的条数等于 y 的列数。
  1. 当 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指定当前活动区。
image

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用于指定分组排列模式。
image

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)

  1. 参数X、Y、Z为长度相同的向量时,组成一组曲线的坐标。
  2. 参数X、Y、Z中有向量,也有矩阵时,向量的长度应与矩阵相符。
  3. 参数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)利用矩阵运算生成
image

>> 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省略时,颜色的设定正比于图形的高度。

image

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 具有光照效果的曲面函数

image

[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函数
多峰函数:

\[f(x,y)=3(1-x^2)e^{-x^2-(y+1)^2}-10(\frac{x}{5}-x^3-y^5)e^{-x^2-y^2}-\frac{1}{3}e^{-(x+1)^2-y^2} \]

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平面下方。
image

(1)view函数的基本用法
view(az,el)
其中,az为方位角,el为仰角。系统默认的视点定义为方位角-37.5°,仰角30°。

%绘制函数z=(

标签:函数,矩阵,绘图,matlab,图形,pi,绘制,sin,MATLAB
From: https://www.cnblogs.com/YuukiAsuna/p/17089457.html

相关文章