文章目录

  • 前言
  • 一、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来绘制三维曲面图、等高线图等相关推荐

  1. Matlab之绘制三维曲面图

    最近在学matlab三维绘图,总结了自己学的一些点,就当是记笔记啦! 情况一: z和x,y有关系,z=f(x,y) 1.surf方法 基本语法 surf(X,Y,Z)         这里的Z可以用X ...

  2. MATLAB绘制三维曲面图和等高线 绘图(2)

    绘制三维曲面图步骤: 1): 对数据进行处理,得到三维曲面上的点坐标组 方法有: 1.将自变量离散, x=xmin:dx:xmax y=ymin:dy:ymax 2.利用meshgrid 指令 生成 ...

  3. 如何利用MATLAB函数绘制三维曲面?系统学习MATLAB三维曲面的绘制

    文章目录 0 前言 1 平面网格数据的生成 2 绘制三维曲面的函数 2.1 mesh函数和surf函数的一般召唤方式 2.2 其他召唤方式 2.3 mesh.surf函数的亲戚朋友 3.标准三维曲面 ...

  4. python绘制三维曲面图-python中Matplotlib实现绘制3D图的示例代码

    Matplotlib 也可以绘制 3D 图像,与二维图像不同的是,绘制三维图像主要通过 mplot3d 模块实现.但是,使用 Matplotlib 绘制三维图像实际上是在二维画布上展示,所以一般绘制三 ...

  5. 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 = ...

  6. 【Matlab】山地建模?立体热度?怎么绘制三维曲面图?

    1.Introduction 距离上次写博客已经差不多两个月了,期间基本也是没碰过代码了,最近搞了下数学建模,重新用了下Matlab,很多语法都忘记了,同时也学到一些新的工具,今天就介绍一下如何将二维 ...

  7. matplotlib绘制三维曲面图

    import numpy as np import matplotlib.pyplot as plt#绘制一张图 fig=plt.figure() #绘制3D子图 ax=fig.add_subplot ...

  8. python绘制三维曲面图-Python中使用Matplotlib绘制3D图形示例

    原标题:Python中使用Matplotlib绘制3D图形示例 3D图形能给我们对数据带来更加深入地理解.python的matplotlib库就包含了丰富的3D绘图工具.3D图形在数据分析.数据建模. ...

  9. MATLAB 之 绘制三维图形的基本函数、三维曲面和其他三维图形

    文章目录 一.绘制三维曲线的基本函数 二.三维曲面 1. 平面网格坐标矩阵的生成 2. 绘制三维曲面的函数 3. 标准三维曲面 三.其他三维图形 1. 三维条形图 2. 三维饼图 3. 三维实心图 4 ...

最新文章

  1. 库克说AI也能创造很多就业岗位,苹果加码教育布局
  2. EJB(四)JPA 分布式事务处理
  3. 错误日志这样排查,干活更得劲了!!
  4. c mysql 中文字符_在C#和MySQL中存取中文字符时避免乱码的方法
  5. Java的组合排列问题
  6. HDU1232 畅通工程
  7. 界面设计方法 (2) — 3.卡式, 列表, 主细表, 树形, 页签
  8. XML解析技术简介——(一)
  9. Android数据存储——SharedPreferences
  10. python print_Python print()
  11. 医咖会免费SPSS教程学习笔记—斯皮尔曼相关系数(秩相关系数)
  12. 黑客之门:深入浅出windows的dll文件[图]
  13. 51单片机存储器结构
  14. php实现银联扫码支付
  15. kafka sparksteaming
  16. Python课堂笔记之判断一个数组中是否含有数字0
  17. 一个刚入行而又不甘于平庸的程序猿2019个人总结
  18. [CTF]No.0006 [强网杯] Who are you
  19. 司创电梯发卡软件_IC卡电梯软件操作速成.
  20. 使用python输出1~100之间的质数

热门文章

  1. java构造一个银行账户类
  2. python线性拟合误差分析_Python – 从线性回归线计算正在进行的1标准偏差
  3. 业务知识与技术知识的积累同样重要
  4. 特征工程——缺失值显示和填充(集中趋势(众数、平均数、中位数)、缺失值矩阵图、条形图、集中趋势填充)
  5. 技术团队的组织文化、制度建设和有效沟通
  6. Scratch-弹球游戏项目需求分析
  7. 极光认证(极光一键登录)JVerification的集成
  8. Python实现单例模式的几种方式
  9. 斯坦福大学数据可视化课程学习笔记:第一节 可视化的发展与目标
  10. C# 以GB2312编码保存数据