MATLAB绘图(二维)--学习笔记

0前言

最近在学习MATLAB,为了更好的学习MATLAB,我对老师上课所讲的内容进行了整理.老师讲的非常好,课程名称为科学计算与MATLAB语言,我又结合MATLAB的帮助文档,做了一点补充。全文15,000字左右,图片约30张。每个练习题都附有代码,我相信敲一遍一定会有比较深刻的认识。如果你感到枯燥,就去B站看看朱一旦的枯燥生活吧。

1.二维曲线

1.1 plot函数

1.11 plot函数的基本用法

plot(x,y)
其中,x和y分别用于存储x坐标和y坐标数据。
通常,x和y为长度相同的向量。
例1 绘制一条折线。

x=[2.5, 3.5, 4, 5];
y=[1.5, 2.0, 1, 1.5];
plot(x, y)

plot1

1.12 最简单的plot函数调用格式

plot(x)

x=[1.5,2,1,1.5]; 
plot(x)

plot2

1.13 参数x是复数向量

当plot函数的参数x是复数向量时,则分别以该向量元素实部和虚部为横、纵坐标绘制出一条曲线。

x=[2.5,3.5,4,5];
y=[1.5,2,1,1.5];
cx=x+y*i;%复型变量也可以用complex函数构建cx=complex(x,y);
plot(cx)

plot3

1.14 plot(x,y)函数参数的变化形式

当x是向量,y是矩阵时
如果矩阵y的列数等于x的长度,则以向量x为横坐标,以y的每个行向量为纵坐标绘制曲线,曲线的条数等于y的行数
如果矩阵y的行数等于x的长度,则以向量x为横坐标,以y的每个列向量为纵坐标绘制曲线,曲线的条数等于y的列数
例2 绘制sin(x)、sin(2x)、sin(x/2)的函数曲线。

x=linspace(0,2*pi,100);%0到2pi,均匀的生成100个数。
y=[sin(x);sin(2*x);sin(0.5*x)]; 
plot(x,y)

plot4
x、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)

plot5

1.15 含多个输入参数的plot函数

含多个输入参数的plot函数
plot(x1,yl,x2,y2,…,xn,yn)
其中,每一向量对构成一组数据点的横、纵坐标,绘制一条曲线。
例3 采用不同个数的数据点绘制正弦函数曲线,观察曲线形态。

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)

plot6

1.16 含选项的plot函数

plot(x,y,选项)其中,选项用于指定曲线的线型、颜色和数据点标记。

符号 线型
“-” 实线
“:” 点划线
“_.” 虚线
“–” 双划线
字母 颜色
“r” 红色
“g” 绿色
“b” 蓝色
“w” 白色
“k” 黑色
符号 数据点标记
“*” 星号
“o” 圆圈
“s” 方块
“p” 五角星
“^” 朝上三角形

例4 用不同线型和颜色在同一坐标内绘制曲线及其包络线
plot7

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')

1.2 fpot函数

用plot函数绘图时,先要取得x、y坐标,然后再绘制曲线,x往往采取等间隔采样。在实际应用中,函数随着自变量的变化趋势未知,或者在不同区间函数频率特性差别大,此时使用plot函数绘制图形,如果自变量的采样间隔设置不合理,则无法反映函数的变化趋势。
例5 绘制函数sin(1/x)的图形。

x=0:0.005:0.2;
y=sin(1./x); 
plot(x,y)

plot8

1.21 fplot函数的基本用法

fplot(f,lims,选项)
其中,f代表一个函数,通常采用函数句柄的形式。lims为x轴的取值范围,用二元向量[xmin,xmax]描述,默认值为[-5,5]。选项定义与plot函数相同。
例6 采用fplot函数绘制函数sin⁡(1/x)。

fplot(@(x) sin(1./x),[0,0.2], 'b')

plot9

1.22 双输入函数参数的用法

fplot(funx,funy,tlims,选项)
其中,funx、funy代表函数,通常采用函数句柄的形式。tlims为参数函数funx和funy的自变量的取值范围,用二元向量[tmin,tmax]描述。
例7 已知螺旋线的参数方程,绘制曲线。

fplot(@(t)t.*sin(t), @(t)t.*cos(t), [0,10*pi], 'r')

plot10

2.绘制图形的辅助操作

2.1 给图形添加标注

2.11 title函数

title函数的基本用法
title(图形标题)
在图形标题中使用LaTeX格式控制符
受LaTeX格式控制的部分要用大括号括起来。

title('y=cos{\omega}t')
title('y=e^{axt}')
title('x_{1}{\geq}X_{2}')
title('{\bf y=cos{\omega}t+{\beta}}')
%格式控制符
%“\bf”:加粗
%“\it”:斜体
%“\rm”:正体

含属性设置的title函数
title(图形标题,属性名,属性值)
Color属性:用于设置图形标题文本的颜色。

title('y=cos{\omega}t','Color’,'r')

FontSize属性:用于设置标题文字的字号。

title'(y=cos{\omega}t','FontSize',24)

2.12 xlabel函数和ylabel函数

xlabel(x轴说明)
ylabel(y轴说明)

2.13 text函数和gtext函数

可以使用text函数和gtext函数在图形中添加文字说明。
text(x,y,说明)%x,y为文字说明的坐标
gtext(说明)%使用此函数,可以用鼠标拖动文字说明的位置

x=-2*pi:0.05:2*pi; 
y=sin(x);plot(x,y)
title('y=sin(x)')
xlabel('-2\pi \leq x \leq 2\pi')%在x轴添加标签
text(-2*pi,0,'-2{\pi}')%在(-2*pi,0)处添加LaTex文字说明-2Π
text(3,0.28,'\leftarrow sin(x)')%在(3,0.28)处添加文字说明sin(x),并用左箭头。

plot11

2.14 legend函数

legend(图例1,图例2,…)
例2 绘制不同频率的正弦曲线并用图例标注曲线。

x = linspace(0, 2*pi, 100);
plot(x, [sin(x); sin(2*x); sin(3*x)])
legend('sin(x)', 'sin(2x)', 'sin(3x)')

plot12

2.2 坐标控制

2.21 axis函数

axis函数的基本用法

axis([xmin,xmax,ymin,ymax,zmin,zmax])%二维图像不需要(zmin,zmax)

axis的其他用法
axis equal:纵、横坐标轴采用等长刻度
axis square:产生正方形坐标系(默认为矩形)
axis auto:使用默认设置
axis off:取消坐标轴
axis on:显示坐标轴

x=[0,1,1,0,0];
y=[0,0,1,1,0]; 
plot(x,y)

在这里插入图片描述

x=[0,1,1,0,0];
y=[0,0,1,1,0]; 
plot(x,y)
axis([-0.1,1.1,-0.1,1.1])%x坐标范围为-0.1到1.1,y坐标轴的范围是-0.1到1.1.
axis equal;%纵、横坐标轴采用等长刻度

plot14

2.22 grid函数

给坐标系加网格,默认情况下没有网格。
grid on
grid off
grid

2.23 box函数

给坐标系加边框,默认有边框。
box on
box off
box

2.3 图形保持

绘图时,如果不使用hold on命令,最后一幅图会覆盖前面的图形。
hold on
hold off
hold

例4 用图形保持功能绘制两个同心圆。

t = linspace(0,2*pi,100);
x = sin(t);  y = cos(t);
plot(x, y, 'b')
hold on;        
plot(2*x, 2*y, 'r--')
grid on%显示网格
axis([-2.2 2.2 -2.2 2.2])
axis equal%纵、横坐标轴采用等长刻度

plot15

2.4 图形窗口的分割

子图:同一图形窗口中的不同坐标系下的图形称为子图。
subplot函数
subplot(m,n,p)
其中,m和n指定将图形窗口分成m×n个绘图区,p指定当前活动区。
划分2×2子图

subplot(2,2,1); 
x=linspace(0,2*pi,60);
y=sin(x);
plot(x,y);
title('sin(x)');
axis ([0,2*pi,-1,1]);

plot16
划分多子图

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])

plot17

3.其他形式的二维曲线

3.1 其他坐标系下的二维曲线图

3.11 对数坐标图

semilogx(x1,y1,选项1,×2,y2,选项2,…)
semilogy(x1,y1,选项1,×2,y2,选项2,…)
1oglog(x1,y1,选项1,x2,y2,选项2,…)
其中
semilogx函数x轴为常用对数刻度,y轴为线性刻度;
semilogy函数x轴为线性刻度,y轴为常用对数刻度;
1oglog函数x轴和y轴均采用常用对数刻度。
例1 绘制1/的直角线性坐标图和三种对数坐标图。

x=0:0.1:10;
y=1./x;
subplot(2,2,1)
plot(x,y) 
title('plot(x,y)');grid on
subplot(2,2,2)
semilogx(x,y)    
title('semilogx(x,y)');grid on
subplot(2,2,3)
semilogy(x,y) 
title('semilogy(x,y)');grid on
subplot(2,2,4)
loglog(x,y) 
title('loglog(x,y)');grid on

plot18

3.12 极坐标图

polar(theta,rho,选项)
其中
theta为极角,rho为极径,选项的内容与plot函数相同。

例2 按极坐标方程ρ=1-sin t绘制心形曲线。

t = 0:pi/100:2*pi;
r = 1-sin(t);
subplot(1,2,1)
polar(t,r)
subplot(1,2,2)
t1 = t-pi/2;
r1 = 1-sin(t1);
polar(t,r1)

plot20

3.2 统计图

3.21 条形图

条形图
bar函数:绘制垂直条形图。
barh函数:绘制水平条形图。
bar函数
bar(y,style)
其中
参数y是数据,选项style用于指定分组排列模式。
“grouped”:簇状分组
“stacked”:堆积分组

例3 绘制分组条形图。

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')

plot20
bar(x,y,style)
其中
x存储横坐标,y存储数据,y的行数必须与向量x的长度相同。选项sty1e用于指定分组排列模式。
例4 下表是某公司2015~2017年家电类商品1月份的销售数据,绘制条形图对比数据。

冰箱 空调 洗衣机 电视机 油烟机
2015 68 80 115 98 102
2016 75 88 102 99 110
2017 81 86 125 105 115
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');

plot21

3.22 直方图

hist函数:绘制直角坐标系下的直方图。
rose函数:绘制极坐标系下的直方图。
hist函数
hist(y)
hist(y,x)
其中,y是要统计的数据,x用于指定区间的划分方式。若x是标量,则统计区间均分成x个小区间;若x是向量,则向量x中的每一个数指定分组中心值,元素的个数为数据分组数。x缺省时,默认按10个等分区间进行统计。

例5 绘制服从高斯分布的直方图。

y=randn(500,1);
subplot(2,1,1); 
hist(y); 
title('高斯分布直方图');
subplot(2,1,2); 
x=-3:0.2:3;
hist(y,x); 
title('指定区间中心点的直方图')')

plot22
rose函数
rose(theta[,x])
其中
参数theta用于确定每一区间与原点的角度
选项x用于指定区间的划分方式
例6 绘制高斯分布数据在极坐标下的直方图。

y=randn(500,1);
theta=y*pi;
rose(theta)
title('在极坐标下的直方图')

plot23

3.23 饼图

扇形图
pie函数
pie(x,explode)
其中
参数x存储待统计数据
选项explode控制图块的显示模式。
面积图
area函数
例7 某次考试优秀、良好、中等、及格、不及格的人数分别为:7、17、23、9、4,试用扇形统计图作成绩统计分析。

score = [5, 17, 23, 9, 4];
ex = [0,0,0,0,1];
pie(score, ex)   
legend('优秀', '良好', '中等’, '及格', '不及格', …
'location', 'eastoutside')%’location'用于指定图例位置,’eastoutside'表示图例放在绘图区域右边的外侧。

plot24

3.24 散点图

scatter函数
scatter(x,y,选项,’filled’)
其中
x、y用于定位数据点
选项用于指定线型、颜色、数据点标记
如果数据点标记是封闭图形,可以用选项‘filled’指定填充数据点标记。
该选项省略时,数据点是空心的。
例8 以散点图形式绘制桃心曲线
曲线的参数方程为
{ x = 16 s i n 3 t y = 13 c o s t 5 c o s ( 2 t ) 2 c o s ( 3 t ) c o s ( 4 t ) \left\{\begin{aligned}x&=16sin^3t\\y&=13cost-5cos(2t)-2cos(3t)-cos(4t)\end{aligned} \right.

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')

plot25

3.25 阶梯图和杆图

staiirs阶梯图
stairs函数
stairs(Y) 绘制 Y 中元素的阶梯图。
如果 Y 为向量,则 stairs 绘制一个线条。
如果 Y 为矩阵,则 stairs 为每个矩阵列绘制一个线条。
stairs(X,Y) 在 Y 中由 X 指定的位置绘制元素。
输入 X 和 Y 必须是相同大小的向量或矩阵。
另外,X 可以是行或列向量,Y 必须是包含 length(X) 行的矩阵。
例9 创建在 0 到 4π 区间内的 40 个均匀分布的值处计算的正弦阶梯图。

X = linspace(0,4*pi,40);
Y = sin(X);
figure
stairs(Y)

plot26
例10 创建两个数据序列的阶梯图并返回两个阶梯图对象。

X = linspace(0,1,30)';
Y = [cos(10*X), exp(X).*sin(10*X)];
h = stairs(X,Y);
h(1).Marker = 'o';对第一个数据序列使用小圆形标记。
h(1).MarkerSize = 4;
h(2).Marker = 'o';
h(2).MarkerFaceColor = 'm';%对第二个序列使用填充品红色的圆形。

plot27
stem杆图
stem(Y) 将数据序列 Y 绘制为从沿 x 轴的基线延伸的针状图。各个数据值由终止每个针状图的圆指示。
stem(X,Y) 在 X 指定的值的位置绘制数据序列 Y。X 和 Y 输入必须是大小相同的向量或矩阵。另外,X 可以是行或列向量,Y 必须是包含 length(X) 行的矩阵。
stem(___,‘filled’) 填充圆形。可以将此选项与前面语法中的任何输入参数组合一起使用。
例11 创建一个包含 −2π 和 2π 之间的 50 个数据值的针状图。
plot28

figure
Y = linspace(-2*pi,2*pi,50);
stem(Y)

例12 创建一个针状图并使用 LineSpec 选项将线型设置为点线,将标记符号设置为菱形,将颜色设置为红色。
plot29

figure
X = linspace(0,2*pi,50)';
Y = (exp(X).*sin(X));
stem(X,Y,':diamondr')

3.3 矢量图形

3.31 箭头图

quiver函数
quiver函数调用格式:
quiver(x,y,u,v)
其中,(x,y)指定矢量起点,(u,v)指定矢量终点。x、y、u、v是同样大小的向量或同型矩阵,若省略x、y,则在x-y平面上均匀取若干个点作为起点。
例13 已知向量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

plot30

3.32 罗盘图

compass(U,V)
compass(Z)
罗盘图显示包含分量 (U,V) 的向量,就像箭头从原点射出一样。U、V 和 Z 位于笛卡尔坐标中,绘制于一个环状网格上。
compass(U,V) 显示具有 n 个箭头的罗盘图,其中 n 是 U 或 V 中的元素数目。每个箭头的基点的位置为原点。每个箭头的尖端的位置是相对于基点的一个点,并由 [U(i),V(i)] 确定。
compass(Z) 显示具有 n 个箭头的罗盘图,其中 n 是 Z 中的元素数目。每个箭头的基点的位置为原点。每个箭头的尖端的位置相对于基点,由 Z 的实部和虚部确定。
例14 创建一个由随机矩阵的特征值构成的罗盘图。
plot31

rng(0,'twister') % initialize random number generator
M = randn(20,20);
Z = eig(M);
figure
compass(Z)

3.33 羽毛图

绘制速度向量
feather(U,V) 显示 U 和 V 指定的向量,其中 U 包含用作相对坐标的 x 分量,V 包含用作相对坐标的 y 分量。
feather(Z) 显示 Z 中的复数指定的向量。

例14 将 theta 定义为介于 −2π 和 2π 之间的值。定义 r 为与 theta 同样大小的向量。创建显示 theta 的方向的羽毛图。由于 feather 使用笛卡尔坐标,使用 pol2cart 将 theta 和 r 转换为笛卡尔坐标。
plot32

theta = -pi/2:pi/16:pi/2;
r = 2*ones(size(theta));
[u,v] = pol2cart(theta,r);
feather(u,v)
发布了8 篇原创文章 · 获赞 2 · 访问量 1851

猜你喜欢

转载自blog.csdn.net/qq_39979317/article/details/105255255