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

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

文章目录

  • MATLAB学习笔记——二维和三维绘图
    • 一、二维绘图
      • 1、plot命令
      • 2、fplot 命令
      • 3、ezplot 绘图命令
      • 4、其他坐标系的绘图命令
      • 5、双 y 轴坐标
    • 二、三维作图

一、二维绘图

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上运行。

MATLAB学习笔记——二维和三维绘图相关推荐

  1. matlab画comsol二维图,标注图在二维和三维绘图组中的运用

    在绘图组中添加标注图,可以非常简便地在仿真结果绘图中标注名称.注释以及指定位置求得的物理量数值.在本篇博客文章中,我们将以热沉模型为例探讨如何添加标注图. 标注图是什么? 标注图是 COMSOL Mu ...

  2. MATLAB学习笔记(二) -- 矩阵和数组

    一.矩阵和数组的创建 函数法主要用于一些具有特许规律的矩阵. (1)zeros() -- 全零矩阵生成,ones() -- 全1矩阵 (2)eye() -- 单位矩阵,不支持二维以上的矩阵生成 (3) ...

  3. MATLAB 的绘图:二维和三维

    本节介绍MATLAB 的两种基本绘图功能:二维平面图形和三维立体图形. 5.1 二维平面图形 5.1.1 基本图形函数 plot 是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的.也就是 ...

  4. B站台湾大学郭彦甫|MATLAB 学习笔记|06 高阶绘图 Advanced Plot

    MATLAB学习笔记(06 高阶绘图 Advanced Plot) 如果想获得更好浏览体验的朋友可以转到下面链接 06 1. 对数图 (Logarithm Plots) x = logspace(-1 ...

  5. MATLAB学习笔记5:绘图基础与数据可视化(中)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

  6. matlab三维选取二维,基于Matlab绘制二维和三维图形以及其他图形控制函数的使用方法...

    Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外,M ...

  7. MATLAB学习笔记(二)

    MATLAB学习笔记(二) 一.矩阵运算 矩阵分析 向量和矩阵的范数运算 矩阵的秩 矩阵的化零矩阵 矩阵的化简rref()函数 线性方程组 超定线性方程组求解 矩阵分解 1.对称正定矩阵的Choles ...

  8. MATLAB学习笔记(十二)

    MATLAB学习笔记(十二) 一.数据插值 1.1 数据插值的计算机制 1.2 数据插值的matlab函数 二.曲线拟合 2.1 曲线拟合原理 2.2 曲线拟合的实现方法 三.数据插值与曲线拟合比较 ...

  9. 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)

    Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...

最新文章

  1. 并行博弈树搜索算法-第6篇 百花齐放:各种并行Alpha-Beta算法
  2. 非变动性算法源代码分析与使用示例( for_each、min_element 、find_if、search 等)...
  3. ubuntu运行Faster R-CNN
  4. opengl加载显示3D模型b3d类型文件
  5. java boolean是什么_java中的boolean与Boolean有什么不同
  6. mnist手写数字数据集_mnist手写数据集(1. 加载与可视化)
  7. Linux 中的零拷贝技术
  8. 带你自学Python系列(二):Python列表总结-思维导图
  9. (25)二分频verilog与VHDL编码(学无止境)
  10. java开发和测试的不同_一些基础的面试的java知识,普及下。开发和测试都用得到。...
  11. Jupyter Notebook的三大短板,都被这个新工具补齐了
  12. 三星s10更新Android10,三星S10官方国行安卓9完整固件升级更新包:CHC-G9730ZCU1ASF1
  13. java sql 搜索拼音
  14. Kettle Carte集群关闭问题
  15. python hypothesis testing
  16. 【opencv 450 core】使用统一向量指令(Universal Intrinsics)对代码进行矢量化
  17. Ashampoo WinOptimizer 2021
  18. java文件长度_Java中的音频文件长度
  19. JVM内存与垃圾回收系列:程序计数器
  20. 杂文(1):Java对象引用详解

热门文章

  1. zookeeper安装和使用
  2. python学习之路-day8
  3. RobotFramework下的http接口自动化post关键字的使用
  4. 《Java核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口
  5. MAC OS上将项目提交到github
  6. docker server 容器连接sql_docker 容器连接 host的sql server失败
  7. 2020 数据技术嘉年华:吹响国产数据库的集结号 诚邀参会览技术前沿
  8. DBA的宿命(困兽之斗)
  9. 数据库智能运维高级探索与最佳实践
  10. 从单机到2000万QPS: 知乎Redis平台发展与演进之路