MATLAB学习笔记——二维和三维绘图
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学习笔记——二维和三维绘图相关推荐
- matlab画comsol二维图,标注图在二维和三维绘图组中的运用
在绘图组中添加标注图,可以非常简便地在仿真结果绘图中标注名称.注释以及指定位置求得的物理量数值.在本篇博客文章中,我们将以热沉模型为例探讨如何添加标注图. 标注图是什么? 标注图是 COMSOL Mu ...
- MATLAB学习笔记(二) -- 矩阵和数组
一.矩阵和数组的创建 函数法主要用于一些具有特许规律的矩阵. (1)zeros() -- 全零矩阵生成,ones() -- 全1矩阵 (2)eye() -- 单位矩阵,不支持二维以上的矩阵生成 (3) ...
- MATLAB 的绘图:二维和三维
本节介绍MATLAB 的两种基本绘图功能:二维平面图形和三维立体图形. 5.1 二维平面图形 5.1.1 基本图形函数 plot 是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的.也就是 ...
- B站台湾大学郭彦甫|MATLAB 学习笔记|06 高阶绘图 Advanced Plot
MATLAB学习笔记(06 高阶绘图 Advanced Plot) 如果想获得更好浏览体验的朋友可以转到下面链接 06 1. 对数图 (Logarithm Plots) x = logspace(-1 ...
- MATLAB学习笔记5:绘图基础与数据可视化(中)
阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...
- matlab三维选取二维,基于Matlab绘制二维和三维图形以及其他图形控制函数的使用方法...
Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外,M ...
- MATLAB学习笔记(二)
MATLAB学习笔记(二) 一.矩阵运算 矩阵分析 向量和矩阵的范数运算 矩阵的秩 矩阵的化零矩阵 矩阵的化简rref()函数 线性方程组 超定线性方程组求解 矩阵分解 1.对称正定矩阵的Choles ...
- MATLAB学习笔记(十二)
MATLAB学习笔记(十二) 一.数据插值 1.1 数据插值的计算机制 1.2 数据插值的matlab函数 二.曲线拟合 2.1 曲线拟合原理 2.2 曲线拟合的实现方法 三.数据插值与曲线拟合比较 ...
- 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)
Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...
最新文章
- 并行博弈树搜索算法-第6篇 百花齐放:各种并行Alpha-Beta算法
- 非变动性算法源代码分析与使用示例( for_each、min_element 、find_if、search 等)...
- ubuntu运行Faster R-CNN
- opengl加载显示3D模型b3d类型文件
- java boolean是什么_java中的boolean与Boolean有什么不同
- mnist手写数字数据集_mnist手写数据集(1. 加载与可视化)
- Linux 中的零拷贝技术
- 带你自学Python系列(二):Python列表总结-思维导图
- (25)二分频verilog与VHDL编码(学无止境)
- java开发和测试的不同_一些基础的面试的java知识,普及下。开发和测试都用得到。...
- Jupyter Notebook的三大短板,都被这个新工具补齐了
- 三星s10更新Android10,三星S10官方国行安卓9完整固件升级更新包:CHC-G9730ZCU1ASF1
- java sql 搜索拼音
- Kettle Carte集群关闭问题
- python hypothesis testing
- 【opencv 450 core】使用统一向量指令(Universal Intrinsics)对代码进行矢量化
- Ashampoo WinOptimizer 2021
- java文件长度_Java中的音频文件长度
- JVM内存与垃圾回收系列:程序计数器
- 杂文(1):Java对象引用详解