matlab绘制三维立体图

        我原以为理解并且会应用matlab绘制三维图,但动起手来,我发现各种不会,弄着弄着都有点怀疑人生了。首先,plot与plot3分别绘制二维与三维的曲线,而不是曲面,这是我的一个误区!还有,当你有x,y,z数据(行向量或者列向量)时,直接用surf(x,y,z)会给你报错,说z为矩阵的提示。还好,我在网上找到一篇博客,讲到此问题,帮我顺利解决难题,感谢笔芯!原因是:

【Matlab】离散点绘制三维曲面方法小结 - Find your love - CSDN博客  https://blog.csdn.net/shanchuan2012/article/details/72772191

        

以上就是我不能直接用surf的原因了。

            解决方法:

  1. 

%确定网格坐标(x和y方向的步长均取0.1)
[X,Y]=meshgrid(min(x):0.1:max(x),min(y):0.1:max(y)); 

meshgrid是MATLAB(一款应用软件)中用于生成网格采样点的函数。在使用MATLAB进行3D图形绘制方面有着广泛的应用。

[X,Y] = meshgrid(x,y)

解释:输出X的每一行的数值都是复制的x的值;输出Y的每一列的数值都是复制的y的值。

meshgrid_百度百科  https://wapbaike.baidu.com/item/meshgrid/3794127?fr=aladdin&ms=1&rid=7297986572924445218

2.
%在网格点位置插值求Z,注意:不同的插值方法得到的曲线光滑度不同
Z=griddata(x,y,z,X,Y,'v4');

ZI = griddata(x,y,z,XI,YI) 调整形如z = f(x,y)的曲面,使之与非等间距矢量(x,y,z)中的数据吻合。griddata 函数在指定的(XI,YI)点处插补此曲面,生成ZI.

此曲面一定通过这些数据点。 XI 和 YI 通常构成均匀网格(与meshgrid函数生成的相同). XI 可以是行矢量,这种情况下该矢量确定一个具有固定列数的矩阵。与之类似,YI 可以是列矢量,确定一个具有固定行数的矩阵。

[XI,YI,ZI] = griddata(x,y,z,XI,YI) 函数返回与上述矩阵相同的插补后的矩阵ZI。并返回由行矢量XI和列矢量yi形成的矩阵XI 和YI. 后者与meshgrid 函数返回的矩阵相同。

[...] = griddata(...,method)使用规定的插补方法:

'linear' 基于三角形的线性插补法(缺省)

'cubic' 基于三角形的三次插补法

'nearest' 最近邻居插补法

'v4' MATLAB 4 griddata方法。

这些方法定义了匹配数据点的曲面类型。'cubic' 和 'v4' 方法生成平滑曲面,而 'linear' 和 'nearest' 分别具有一阶导数和零阶导数不连续。除'v4' 外所有方法基于数据的三角化。如果方法为[], 则使用缺省的'linear' 方法。

griddata_百度百科  https://wapbaike.baidu.com/item/griddata/3922116?fr=aladdin&ms=1&rid=7053847170498709362&sc_id=G10EwzC

3.
%绘制曲面
figure(1)
surf(X,Y,Z);

4.
shading interp;

matlab函数——shading函数 - 细水长流 - CSDN博客  https://blog.csdn.net/qq_27561265/article/details/48267579

5.
colormap(jet);

查看并设置当前颜色图 - MATLAB colormap - MathWorks 中国  https://ww2.mathworks.cn/help/matlab/ref/colormap.html

要是绘制散点图,可以用scatter函数,不用连成曲线,而是单独的点

https://www.baidu.com/link?url=GnEJwgc1YDjEaYRitf5s4pT7qLOxtEE7V3QcgWqHJmgLerUCGZmGSdd65Ycqk8DNyYHph6r7fGj5QF-5MmQgia&wd=&eqid=fc645bb800023ac5000000035c8b92d3

猜你喜欢

转载自blog.csdn.net/qq_27690393/article/details/88579140