MATLAB学习笔记——二维和三维绘图

MATLAB学习笔记——二维和三维绘图

近期练习matlab的二维和三维绘图,整理一下,以防忘记。

一、二维绘图

1、plot命令

plot 命令是最基本的绘图命令。

x = -10:1:10;
plot(x,x.^2);

结果如下:在这里插入图片描述
如果要在同一图形窗口中分割出所需要的几个窗口来,可以使用 subplot 命令。

subplot(m, n, p)

将当前窗口分割成 mxn 个视图区域,第p个视图为当前视图。

subplot('position',[left bottom width height])

这个命令是用户自由指定区域,后面的四元组为区域的具体控制参数,宽高的取值范围都是[0,1]。

示例

x = -10:1:10;
subplot(2,1,1),plot(x,x.^2);
subplot(2,1,2),plot(x,x.^3);

在这里插入图片描述

x = -10:1:10;
subplot(2,2,1),plot(x,x.^2);
subplot(2,2,2),plot(x,x.^3);
subplot(2,2,3),plot(x,x.^4);
subplot(2,2,4),plot(x,x.^5);

在这里插入图片描述
plot(x,y)中,x和y的维度相同,绘制以x为横坐标,以y为纵坐标的曲线;当x是向量,y是有一维与x等维的矩阵时,绘制出多根不同颜色的曲线,曲线数目等于y矩阵的另一维数,x作为这些曲线的横坐标;当x和y都是矩阵时,必须是同维,画出对应的曲线,x为横坐标,y为纵坐标。

x = 1:10;
x2 = [x'/2,x'/4,x'*2,x'*4];
y1 = [x',x'+1,(x').^2,(x'+1).^2];
subplot(2,2,1),plot(x,x.^2);
subplot(2,2,2),plot(x,y1);
subplot(2,2,3),plot(x2,x);
subplot(2,2,4),plot(x2,y1);

在这里插入图片描述
plot(x1,y1,x2,y2…)这个函数的功能是绘制多条曲线。(xi,yi)必须是成对出现的。

x = 1:0.01:2*pi;
y1 = cos(x);
y2 = sin(x);
y3 = cos(2*x);
y4 = sin(2*x);
plot(x,y1,x,y2,x,y3,x,y4);

在这里插入图片描述
plot(x,y,s),其中 s 是用单引号标记的字符串,用来设置所画数据点的类型、大小、颜色以及数据点之间连线的类型、粗细、颜色等。实际应用中,s 是某些字母或符号的组合。s 可以省略,此时将由 matlab 系统默认设置,曲线一律采用实现,研策按照(蓝、绿、红、青、品红、黄、黑、白)顺序着色。

字符色彩RGB值
b(blue)蓝色001
g(green)绿色010
r(red)红色100
c(cyan)青色011
m(magenta)品红101
y(yellow)黄色110
k(black)黑色000
w(white)白色111

线性符号及其说明

线性符号符号含义
-实线(默认值)
:点线
- -虚线
-.点画线

在这里插入图片描述
线型控制的字符表

字符数据点
+加号
o小圆圈
*星号
.实点
x交叉号
d梯形
^向上三角形
>向右三角形
<向左三角形
s正方形
h正六角星
p正五角星
v向下三角形

hold on 命令用来使当前轴及图形保持不变,后面plot画的图接着在当前图上画。hold off使当前轴及图形不再保持上述性质。

x = (0:pi/100:pi)';
y1 = sin(x)*[1,-1];
y2 = sin(x).*sin(9*x);
t3 = pi*(0:9)/9;
y3 = sin(t3).*sin(9*t3);
plot(x,y1,'r:',x,y2,'-bo')

在这里插入图片描述

plot(t3,y3,'s','MarkerSize',10,'MarkerEdgeColor',[0,0.5,0],'MarkerFaceColor',[0.7,0.4,0])

在这里插入图片描述
MarkerEdgeColor和MarkerFaceColor的后面接上一个向量[x, y, z],对应着各种颜色的RGB值,上表已经给出常用颜色的RGB值。

2、fplot 命令

fplot命令也是Matlab提供的一个画图命令。它是专门用于画一元函数图像的命令。plot也可以画一元图像,plot是按照我们给的数据点作图,fplot函数可以自适应指导函数点的选取,在函数变化比较平缓处,它所选取的数据点就会相对稀疏一点,在函数变化明显处所取得的数据点就会自动密一些,因此fplot函数做出的图像要比plot函数做出的图像光滑准确。
fplot 函数的主要调用格式如下

调用格式说明
fplot(f,lim)在指定的范围lim内画出一元函数 f 的图形
fplot(f,lim,s)用指定的线形s画出一元函数 f 的图形
fplot(f,lim,n)画一元函数f的图像时,至少画出n+1个点
fplot(funx,funy)在t的默认间隔[-5,5]上绘制由x=funx(t)和y=funy(t)定义的曲线
fplot(funx,funy,tinterval)在指定的时间间隔内绘制。将间隔指定为[tmin,tmax]形式的二维向量
fplot(_,LineSpec)指定线条样式、标记符号和线条颜色。例如,‘-r’绘制一条红线。在前面语法中的任何输入参数组合之后使用此选项
fplot(_,Name,Value)使用一个或多个名称-值对参数指定行属性
fplot(ax,_)绘制到由x指定的轴中,而不是当前轴(GCA)。指定轴作为第一个输入参数
fp = fplot(__)根据输入返回函数行对象或参数化函数行对象。使用FP查询和修改特定行的属性
[X,Y]=fplot(f,lim,…)返回横坐标与纵坐标的值给变量x和y

对于上面的各种用法有几点说明
(1)f 对字符向量输入在高版本不被支持,可以改用函数句柄,例如’sin(x)’,改为@(x)sin(x)。
(2)lim是指x轴范围的向量[xlim,xmax]或者y轴范围的向量[ymin.ymax]。

x = linspace(0.01,0.02,50);
y = sin(1./x);
subplot(1,2,1),plot(x,y);
subplot(1,2,2),fplot(@(x)sin(1./x),[0.01,0.02])

在这里插入图片描述
可以看出fplot命令所画的图比用plot命令所做的图光滑准确。这主要是因为分点取的太少了,也就是说对区间的划分还不够细。

3、ezplot 绘图命令

ezplot 主要用来绘制符号函数。

ezplot 命令的主要调用格式为

调用格式说明
ezplot(f)绘制函数 f(x) 在默认区间 x ∈ ( − 2 π , 2 π ) x\in(-2\pi,2\pi) x(2π,2π)上的图像,若f 为隐函数 f(x,y),则在默认区间 x ∈ ( − 2 π , 2 π ) x\in(-2\pi,2\pi) x(2π,2π), y ∈ ( − 2 π , 2 π ) y\in(-2\pi,2\pi) y(2π,2π) 上绘制 f(x,y)=0 的图像
ezplot(f,[a,b])绘制函数f(x)在区间 x ∈ ( a , b ) x\in(a,b) x(a,b)上的图像,若 f 为隐函数 f(x,y) ,则在区域 x ∈ ( a , b ) , y ∈ ( a , b ) x\in(a,b),y\in(a,b) x(a,b),y(a,b)上绘制f(x,y)=0的图像
ezplot(x,y)在默认区间 x ∈ ( 0 , 2 π ) x\in(0,2\pi) x(0,2π)上绘制参数曲线x = x(t),y=y(t)的图像
eaplot(x,y,[a,b])在区间 x ∈ ( a , b ) x\in(a,b) x(a,b)上绘制图形
ezplot(…,figure)在指定的图形窗口中绘制函数图像

示例

syms x
f1 = exp(2*x)*sin(2*x);
subplot(2,2,1),ezplot(exp(2*x),[-pi,pi]);
subplot(2,2,2),ezplot(sin(2*x));
subplot(2,2,3),ezplot(exp(2*x)+sin(2*x),[-pi,pi,0,2*pi]);
subplot(2,2,4),ezplot(f1,[-4*pi,4*pi]);

在这里插入图片描述
在练习这个函数时,我的 matlab 提示不要使用这个函数,要使用fplot 或者 fimplicit 函数。然后我去查看了一下 fimplicit 函数的相关用法,matlab帮助文档fimplicit函数,发现fimplicit函数和ezplot函数非常相似。

语法说明
fimplicit(f)在默认区间[-5,5]上绘制f(x,y)=0定义的隐函数
fimplicit(f,interval)在指定区间上绘图
fimplicit(ax,__)在指定坐标区ax中绘图,而不是在当前坐标区中绘图
fimplicit(__,LineSpec)指定线型、标记符号和线条颜色。
fimplicit(__,Name,Value)使用一个或多个名称-值对组参数指定线条属性。
fp=fimplicit(__)返回ImplicitFunctionLine对象。使用 fp 可在创建线条后访问和修改线条属性

示例

fimplicit(@(x,y)x.^2 - y.^2 - 1)

在这里插入图片描述
指定区间绘图

fimplicit(@(x,y) x.^2 + y.^2 - 3,[-3 0 -2 2])

在这里插入图片描述
通过实验证明,fimplicit 函数的效果优于 ezplot 函数。

4、其他坐标系的绘图命令

4.1 极坐标下绘图
polar 函数绘制极坐标下的函数图像。

调用格式说明
polar(theta,rho)在极坐标中绘图,theta 的元素代表弧度,rho 代表极坐标矢径。
polar(theta,rho,s)在极坐标中绘图,s表示线性、粗细、颜色等
t = 0:0.01:4*pi;
r = abs(sin(t).*cos(t));
polar(t,r)

在这里插入图片描述

t = linspace(0, 24*pi, 1000);
r = exp(sin(t))-2*sin(4.*t) + (cos(t./5)).^6;
subplot(2,1,1),plot(t,r);
subplot(2,1,2),polar(t,r);

在这里插入图片描述
还可以借助 pol2cart 命令,将相应的极坐标数据点转成直角坐标系下的数据点。

[x,y] = pol2cart(t,r);
figure
plot(x,y);

在这里插入图片描述
4.2 对数坐标系下绘图
利用 semilogx 与 semilogy 命令可以很容易实现这种作图方式。semilogx 命令用来绘制 x 轴为半对数的曲线,semilogy 命令用来绘制 y 轴为半对数坐标的曲线,他们使用格式是一样的。
loglog 实现双对数坐标系绘图。

close all
x = 0:0.01:1;
y = 10.^x;
subplot(1,2,1),semilogy(x,y)
subplot(1,2,2),plot(x,y)

在这里插入图片描述

5、双 y 轴坐标

双 y 轴坐标比较常用,比如绘制时深剖面等,实现这一操作的命令是 plotyy,其使用格式见下表:

调用格式说明
plotyy(x1,y1,x2,y2)用左边的y轴画出x1对应的y1的图,用右边的y轴

二、三维作图

博主第一次接触三维绘图使用的函数是 slice 函数,先从 slice 函数的使用方法来讲解。

从 matlab 帮助matlab中slice函数用法可以查阅 slice 函数的用法。

调用格式说明
slice(x,y,z,v,xslice,yslice,zslice)x,y,z,为坐标,v为三维数据,xslice,yslice 和 zslice 为切片的位置
slice(v,xslice,yslice,zslice)使用三维数据v的默认坐标,v中每个元素的位置分别基于列、行和页面索引。
slice(__,method)指定插值方法,其中 method 可以是‘linear’(默认值)、’cubic‘或’nearest’。可将此选项与上述语法中的任意输入参数仪器使用。
slice(ax,__)在指定坐标区而不是当前坐标区(gca)中绘图。
s = slice(__)返回创建的Surface 对象。slice 为每个切片返回一个Surface 对象。

官网@slice官网上的实例如下:

[X,Y,Z] = meshgrid(-5:0.2:5);
v = X.*exp(-X.^2-Y.^2-Z.^2);

[xsurf,ysurf] = meshgrid(-2:0.2:2);
zsurf = xsurf.^2 - ysurf.^2;
slice(X,Y,Z,v,xsurf,ysurf,zsurf)

在这里插入图片描述
可见 zsurf 表示是一个曲面。
我们对 zsurf 进行修改,把2次方改成3次方。

zsurf = xsurf.^3 - ysurf.^3;

在这里插入图片描述
把 zsurf 矩阵数据全部改成1

zsurf = ones(size(xsurf,1));

在这里插入图片描述
第二个示例

[X,Y,Z] = meshgrid(-2:.2:2);
v = X.*exp(-X.^2-Y.^2-Z.^2);

xslice = [-1.2,0.8,2];
yslice = [];
zslice = 0;
slice(X,Y,Z,v,xslice,yslice,zslice);

在这里插入图片描述
运用插值方法,linear(默认),cubic,nearest。

[X,Y,Z] = meshgrid(-2:.2:2);
v = X.*exp(-X.^2-Y.^2-Z.^2);

xslice = [-1.2,0.8,2];
yslice = [];
zslice = 0;
slice(X,Y,Z,v,xslice,yslice,zslice,'nearest');

在这里插入图片描述
这个函数接受GPU数组,但是不在GPU上运行。

  • 6
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

商功贤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值