Matlab来绘制三维曲面图、等高线图等
文章目录
- 前言
- 一、Matlab插值
- 1.Meshgrid函数
- 2.Griddata函数
- 二、绘制
- 1.使用函数
- (1)linspace函数
- (2)peaks函数
- (3)polt3函数
- (4)mesh函数
- (5)surf函数
- (6)contour函数
- 2.步骤
- (1)常见数学函数绘图
- (2)离散数据绘图
- 引用出处
前言
最近需要用到Matlab来绘制三维的地形图等,即通过已知的山地海拔数据,利用Matlab软件使用插值法绘制三维曲面图、等高线图。
一、Matlab插值
插值就是在已知数据之间计算估计值的过程,是一种实用的数值方法,是函数逼近的重要方法。在信号处理和图形分析中,插值运算的应用较为广泛。而matlab中常用的有interp,meshgrid,griddata等函数。
我在这里仅使用meshgrid和griddata函数,关于Matlab插值的其他方法,有兴趣可以看 Matlab 之meshgrid, interp, griddata 用法和实例(转).以及Matlab中插值函数汇总和使用说明。
1.Meshgrid函数
Meshgrid用于从数组a和b产生网格,生成用于画三维图形的矩阵数据。生成的网格矩阵A和B大小是相同的。它也可以是更高维的。这里的大小指的是,size()函数的大小,size()函数返回的是一个向量, 那么size(A) = size(B)。
[A,B]=meshgrid(a,b)
生成size(b)Xsize(a)大小的矩阵A和B。它相当于a从一行重复增加到size(b)行,把b转置成一列再重复增加到size(a)列。
meshgrid 和 mesh 方法的差别在于是否会画出栅格线。
生成绘制3D图形所需的网格数据。因为在计算机中进行绘图操作时,往往需要一些采样点,然后根据这些采样点来绘制出整个图形。
涉及到a、b这两组数据可以看做是在 Oxy 平面内对坐标进行采样得到的坐标对(a, b)。1
解释:输出 X 的每一行的数值都是复制的x的值;输出 Y 的每一列的数值都是复制的y的值。
所以,若x-1xm维, y-1xn维,则[X,Y]为 mxn 维
也就是说,在 XOY 平面上,用m个x和n个y,通过不断做垂线,产生交点从而生成小的矩形网格的方法,生成网格图。
[X,Y]=meshgrid(x) 与 [X,Y]=meshgrid(x,x) 是等同的
2.Griddata函数
用二元函数z=f(x,y)的曲面拟合有不规则的数据向量x,y,z。griddata 将返回曲面z 在点(XI,YI)处的插值。曲面总是经过这些数据点(x,y,z)的。输入参量(XI,YI)通常是规则的格点(像用命令meshgrid 生成的一样)。XI 可以是一行向量,这时XI 指定一有常数列向量的矩阵。类似地,YI 可以是一列向量,它指定一有常数行向量的矩阵。
格式:
(1)
vq = griddata(x,y,v,xq,yq)
vq = griddata(x,y,v,xq,yq) 使 v = f(x,y) 形式的曲面与向量 (x,y,v) 中的散点数据拟合。griddata 函数在 (xq,yq) 指定的查询点对曲面进行插值并返回插入的值 vq。曲面始终穿过 x 和 y 定义的数据点。
(2)
vq = griddata(x,y,z,v,xq,yq,zq)
vq = griddata(x,y,z,v,xq,yq,zq) 拟合 v = f(x,y,z) 形式的超曲面。
(3)
vq = griddata(___,method)
vq = griddata( ,method) 使用上述语法中的任何输入参数指定计算 vq 所用的插值方法。method 可以是 ‘linear’、‘nearest’、‘natural’、‘cubic’ 或 ‘v4’。默认方法为 ‘linear’。
详细使用方法参考官网帮助中心griddata函数。
二、绘制
1.使用函数
(1)linspace函数
用法:linspace(x1,x2,n)
功能:linspace是Matlab中的一个指令,用于产生x1,x2之间的n点行矢量(生成线性间距向量)。其中x1、x2、n分别为起始值、中止值、元素个数。若缺省n,默认点数为100。
y = linspace(x1,x2)
返回包含 x1 和 x2 之间的 100 个等间距点的行向量。
y = linspace(x1,x2,n)
生成 n 个点。这些点的间距为 (x2-x1)/(n-1)。
linspace 类似于冒号运算符“:”,但可以直接控制点数并始终包括端点。
(2)peaks函数
MATLAB 提供了一个 peaks 函数(包含两个变量的示例函数),可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点,其本质是二元高斯分布的概率密度函数。
语法2
Z = peaks;
Z = peaks(n);
Z = peaks(V);
Z = peaks(X,Y);
peaks(…)
[X,Y,Z] = peaks(…);
说明:
peaks 是从高斯分布转换和缩放得来的包含两个变量的函数,在演示 mesh、surf、pcolor、contour 等函数中很有用。
Z = peaks; 返回一个 49×49 矩阵。
Z = peaks(n); 返回一个 n×n 矩阵。
Z = peaks(V); 返回一个 n×n 矩阵,其中 n = length(V)。
Z = peaks(X,Y); 在给定的 X 和 Y(必须大小相同)处计算 peaks 并返回大小相同的矩阵。
peaks(…)(无输出参数)使用 surf 绘制 peaks 函数。使用先前语法中的任意输入参数组合。
[X,Y,Z] = peaks(…); 返回另外两个矩阵 X 和 Y 用于参数绘图,例如 surf(X,Y,Z,del2(Z))。如未作为输入参数给出,基础矩阵 X 和 Y 是
[X,Y] = meshgrid(V,V)
其中 V 是给定向量,或者 V 是长度为 n 的向量,其元素从 -3 到 3 均匀间隔。如果未给出输入参数,默认的 n 是 49。
peaks
%默认n为49
生成图像及函数如下:
(3)polt3函数
plot3函数只能绘制出三维的曲线,并不能绘制出三维曲面。
plot3(X,Y,Z)
plot3(X,Y,Z) 绘制三维空间中的坐标。
要绘制由线段连接的一组坐标,请将 X、Y、Z 指定为相同长度的向量。
要在同一组坐标轴上绘制多组坐标,请将 X、Y 或 Z 中的至少一个指定为矩阵,其他指定为向量。
plot3(X,Y,Z,LineSpec)
plot3(X,Y,Z,LineSpec) 使用指定的线型、标记和颜色创建绘图。
如官方案例:
%创建两组 x、y 和 z 坐标。
t = 0:pi/500:pi;
xt1 = sin(t).*cos(10*t);
yt1 = sin(t).*sin(10*t);
zt1 = cos(t);xt2 = sin(t).*cos(12*t);
yt2 = sin(t).*sin(12*t);
zt2 = cos(t);
%调用 plot3 函数,并指定连续的 XYZ 三元组。
plot3(xt1,yt1,zt1,xt2,yt2,zt2)
(4)mesh函数
使用mesh函数可以生成三维网格曲面图(mesh即网格,网状物)。
meshc:网格曲面图下的等高线图,用法同mesh。
meshz:带帷幕的网格曲面图,用法同mesh。
语法:
mesh(X,Y,Z)
mesh(X,Y,Z) 创建一个网格图,该网格图为三维曲面,有实色边颜色,无面颜色。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。边颜色因 Z 指定的高度而异。
mesh(Z)
mesh(Z) 创建一个网格图,并将 Z 中元素的列索引和行索引用作 x 坐标和 y 坐标。
mesh(Z,C)
mesh(Z,C) 进一步指定边的颜色。
(5)surf函数
surf:三维着色曲面图
surfc:三维着色曲面图下的等高线图
surfl:具有基于颜色图的光照的三维着色曲面图
其中surfl如下图,在图中以XOY面为向光面,用高亮(橙)黄色标出,光线照射不到的地方即背阴处用蓝色着色。
语法:
surf(X,Y,Z)
surf(X,Y,Z) 创建一个三维曲面图,它是一个具有实色边和实色面的三维曲面。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。曲面的颜色根据 Z 指定的高度而变化。
surf(X,Y,Z,C)
此外,surf(X,Y,Z,C) 还指定曲面的颜色。
surf(Z)
surf(Z) 创建一个曲面图,并将 Z 中元素的列索引和行索引用作 x 坐标和 y 坐标。
(6)contour函数
contour:矩阵的二维等高线图
contour3:三维等高线图
contourf:填充的二位等高线图
contour(Z)
contour(Z) 创建一个包含矩阵 Z 的等值线的等高线图,其中 Z 包含 x-y 平面上的高度值。Matlab 会自动选择要显示的等高线。Z 的列和行索引分别是平面中的 x 和 y 坐标。
contour(X,Y,Z)
contour(X,Y,Z) 指定 Z 中各值的 x 和 y 坐标。
2.步骤
首先就是要进行数据处理,详细的来说就是要对数据进行处理,得到三维曲面上的点坐标组。
可以得到真实地形的高程数据来做出真实的三维地形曲面图,具体请看
三维地形图建模仿真。
(1)常见数学函数绘图
将函数通过三维来表示出来:
1.先将变量离散,如x=xmin:dx:xmax y=ymin:dy:ymax
2.使用meshgrid来创建网格矩阵
3.用z=f(x,y)来求出z
4.用mesh或者surf函数绘图。
例如画出函数z=x2+y2(mesh和surf都可以)
注意在matlab中.^2 是矩阵中的每个元素都求平方,^2是求矩阵的平方或两个相同的矩阵相乘。
x=-20:20
[X,Y]=meshgrid(x)
Z=X.^2+Y.^2
mesh(X,Y,Z)%如图所示
还有些画出来很有意思的函数如x2+y2=z2,z=25-x2-y2, z=25-sqrt(x2+y2),x2+y2+z2=25等等。
(2)离散数据绘图
再有就是获得地形数据或者离散数据我们该怎样去绘制
1.先将数据存入矩阵
2.读出数据(1.2.可省略)
3.对数据的x轴,y轴方向进行插值
4.用meshgrid生成网格矩阵
5.用griddata函数对数据进行拟合
6.用mesh或surf函数绘制
例如 得到数据如
1.486 3.059 0.1;2.121 4.041 0.1;2.570 3.959 0.1;3.439 4.396 0.1;4.505 3.012 0.1;3.402 1.604 0.1;2.570 2.065 0.1;2.150 1.970 0.1;
1.794 3.059 0.2;2.121 3.615 0.2;2.570 3.473 0.2;3.421 4.160 0.2;4.271 3.036 0.2;3.411 1.876 0.2;2.561 2.562 0.2;2.179 2.420 0.2;
2.757 3.024 0.3;3.439 3.970 0.3;4.084 3.036 0.3;3.402 2.077 0.3;
2.879 3.036 0.4;3.421 3.793 0.4;3.953 3.036 0.4;3.402 2.219 0.4;
3.000 3.047 0.5;3.430 3.639 0.5;3.822 3.012 0.5;3.411 2.385 0.5;
3.103 3.012 0.6;3.430 3.462 0.6;3.710 3.036 0.6;3.402 2.562 0.6;
3.224 3.047 0.7;3.411 3.260 0.7;3.542 3.024 0.7;3.393 2.763 0.7;
通过上述方法来执行
a=[1.486 3.059 0.1;2.121 4.041 0.1;2.570 3.959 0.1;3.439 4.396 0.1;4.505 3.012 0.1;3.402 1.604 0.1;2.570 2.065 0.1;2.150 1.970 0.1;
1.794 3.059 0.2;2.121 3.615 0.2;2.570 3.473 0.2;3.421 4.160 0.2;4.271 3.036 0.2;3.411 1.876 0.2;2.561 2.562 0.2;2.179 2.420 0.2;
2.757 3.024 0.3;3.439 3.970 0.3;4.084 3.036 0.3;3.402 2.077 0.3;
2.879 3.036 0.4;3.421 3.793 0.4;3.953 3.036 0.4;3.402 2.219 0.4;
3.000 3.047 0.5;3.430 3.639 0.5;3.822 3.012 0.5;3.411 2.385 0.5;
3.103 3.012 0.6;3.430 3.462 0.6;3.710 3.036 0.6;3.402 2.562 0.6;
3.224 3.047 0.7;3.411 3.260 0.7;3.542 3.024 0.7;3.393 2.763 0.7;];
x=a(:,1);
y=a(:,2);
z=a(:,3);
xtemp=linspace(min(x),max(x),100);
ytemp=linspace(min(y),max(y),100);
[X,Y]=meshgrid(xtemp,ytemp);
Z=griddata(x,y,z,X,Y,'v4');
mesh(X,Y,Z)%如图所示
若文章有错误或不妥之处,欢迎大家指正,谢谢
Matlab来绘制三维曲面图、等高线图等相关推荐
- Matlab之绘制三维曲面图
最近在学matlab三维绘图,总结了自己学的一些点,就当是记笔记啦! 情况一: z和x,y有关系,z=f(x,y) 1.surf方法 基本语法 surf(X,Y,Z) 这里的Z可以用X ...
- MATLAB绘制三维曲面图和等高线 绘图(2)
绘制三维曲面图步骤: 1): 对数据进行处理,得到三维曲面上的点坐标组 方法有: 1.将自变量离散, x=xmin:dx:xmax y=ymin:dy:ymax 2.利用meshgrid 指令 生成 ...
- 如何利用MATLAB函数绘制三维曲面?系统学习MATLAB三维曲面的绘制
文章目录 0 前言 1 平面网格数据的生成 2 绘制三维曲面的函数 2.1 mesh函数和surf函数的一般召唤方式 2.2 其他召唤方式 2.3 mesh.surf函数的亲戚朋友 3.标准三维曲面 ...
- python绘制三维曲面图-python中Matplotlib实现绘制3D图的示例代码
Matplotlib 也可以绘制 3D 图像,与二维图像不同的是,绘制三维图像主要通过 mplot3d 模块实现.但是,使用 Matplotlib 绘制三维图像实际上是在二维画布上展示,所以一般绘制三 ...
- Python——根据散点数据绘制三维曲面图( meshgrid函数以及Axes3D [plot_surface] )
1.初始散点数据处理成xy网格数据 import numpy as np x = np.arange(-2, 2, 0.025) y = np.arange(-2, 2, 0.025) x, y = ...
- 【Matlab】山地建模?立体热度?怎么绘制三维曲面图?
1.Introduction 距离上次写博客已经差不多两个月了,期间基本也是没碰过代码了,最近搞了下数学建模,重新用了下Matlab,很多语法都忘记了,同时也学到一些新的工具,今天就介绍一下如何将二维 ...
- matplotlib绘制三维曲面图
import numpy as np import matplotlib.pyplot as plt#绘制一张图 fig=plt.figure() #绘制3D子图 ax=fig.add_subplot ...
- python绘制三维曲面图-Python中使用Matplotlib绘制3D图形示例
原标题:Python中使用Matplotlib绘制3D图形示例 3D图形能给我们对数据带来更加深入地理解.python的matplotlib库就包含了丰富的3D绘图工具.3D图形在数据分析.数据建模. ...
- MATLAB 之 绘制三维图形的基本函数、三维曲面和其他三维图形
文章目录 一.绘制三维曲线的基本函数 二.三维曲面 1. 平面网格坐标矩阵的生成 2. 绘制三维曲面的函数 3. 标准三维曲面 三.其他三维图形 1. 三维条形图 2. 三维饼图 3. 三维实心图 4 ...
最新文章
- 库克说AI也能创造很多就业岗位,苹果加码教育布局
- EJB(四)JPA 分布式事务处理
- 错误日志这样排查,干活更得劲了!!
- c mysql 中文字符_在C#和MySQL中存取中文字符时避免乱码的方法
- Java的组合排列问题
- HDU1232 畅通工程
- 界面设计方法 (2) — 3.卡式, 列表, 主细表, 树形, 页签
- XML解析技术简介——(一)
- Android数据存储——SharedPreferences
- python print_Python print()
- 医咖会免费SPSS教程学习笔记—斯皮尔曼相关系数(秩相关系数)
- 黑客之门:深入浅出windows的dll文件[图]
- 51单片机存储器结构
- php实现银联扫码支付
- kafka sparksteaming
- Python课堂笔记之判断一个数组中是否含有数字0
- 一个刚入行而又不甘于平庸的程序猿2019个人总结
- [CTF]No.0006 [强网杯] Who are you
- 司创电梯发卡软件_IC卡电梯软件操作速成.
- 使用python输出1~100之间的质数