利用matlab将三维数据画成三维立体图

首先先分析对象。将数据利用matlab画出图,最开始是导入数据,然后处理数据,最后将处理的数据画出来。

所以我将它分为三个步骤。

第一步:导入数据

  • 如果是mat数据。可以直接load
  • 如果是txt数据。可以用txtread
  • 如果是excel数据。可以用xlsread

详细的,可以参考Matlab文件和数据的导入与导出_如何将文件导入/matlab drive_blueskyjian的博客-CSDN博客

代码如下:

%% 导入数据
clear all;clc;close all;
load xyzdata.mat;%导入的的数据应当去除NaN值

这是我的数据截图:

注:需要注意的是,要将数据的NaN(空值)去掉。可以在matlab工作去查看,并去除。

第二步:数据处理

由于我们的x、y轴数据,并不是1 、 2 、3等这样的整数排列的,所以必须利用原有的数据,重新构造三维数据。

重构三维数据主要有两步:

  • 第一步:栅格化,用到meshgrid()函数
  • 第二步:插值,用到griddata()函数

栅格化原理、效果可以参考【Matlab】离散点绘制三维曲面方法小结_将离散的点拟合成三维曲面_itsc的博客-CSDN博客

简单来时就是绘制网格

插值原理、效果可以参考Matlab 之meshgrid, interp, griddata 用法和实例_pingmin2014的博客-CSDN博客

简单来说就是估计绘制网格格点的z的数据

代码如下:

%% 相关计算
[a,~]=size(xRow);%x轴数据总共*******行;
xmax=max(xRow);%x轴数据最大值为********
xmin=min(xRow);%x轴数据最小值为*********
%下面两行是测试用的,便于设置间隔值
%delta_x=xmax-xmin;%x轴范围宽度值为*****
%delta_x/a;%z轴间隔大约为1.4796e-04,可以设置为0.01,如果想要更为精确,可以设置为0.001、0.0001
[b,~]=size(yCol);%y轴数据为********
ymax=max(yCol);%y轴数据最大值为********
ymin=min(yCol);%y轴数据最小值为********
%下面两行是测试用的,便于设置间隔值
%delta_y=ymax-ymin;%轴范围宽度值为为*********
%delta_y/b;%y轴间隔大约为9.9876e-05,可以设置为0.01,如果想要根为精确,可以设置为0.001、0.0001

第三步:画图

这一步需要注意的是:选好网格间隔,网格间隔越小,精确度越高,相对应的,计算量越大,电脑性能要求越高。

电脑性能不高的,可以跳大间隔,同时优化代码,清除画图用不了的变量。

代码如下:

%% 重构三维数据,画图
%间隔为 0.05的时候,X Y数据为 *****×****,  电脑一般的,将间隔调大
%间隔为    1的时候,X Y数据为 ***×****,    电脑  好的,将间隔调小
[X,Y]=meshgrid(xmin:1:xmax,ymin:1:ymax);%将x、y轴网格化,重构用于画图x、y轴数据
Z=griddata(xRow,yCol,z,X,Y);%插值,重构用于画图的Z轴数据
clear a b xmax xmin ymin ymax xRow yCol z;
mesh(X,Y,Z)

实验结果:

由于保密需要吗,图像结果打上马赛克,数据也不能提供。

完整代码:

%利用txt excel等大量x y z数据,化三维立体图
%% 导入数据
clear all;clc;close all;
load xyzdata.mat;%导入的的数据应当去除NaN值
%% 相关计算
[a,~]=size(xRow);%x轴数据总共********行;
xmax=max(xRow);%x轴数据最大值为**********
xmin=min(xRow);%x轴数据最小值为********
%下面两行是测试用的,便于设置间隔值
%delta_x=xmax-xmin;%x轴范围宽度值为*****
%delta_x/a;%z轴间隔大约为1.4796e-04,可以设置为0.01,如果想要更为精确,可以设置为0.001、0.0001
[b,~]=size(yCol);%y轴数据为******
ymax=max(yCol);%y轴数据最大值为******
ymin=min(yCol);%y轴数据最小值为********
%下面两行是测试用的,便于设置间隔值
%delta_y=ymax-ymin;%轴范围宽度值为为******
%delta_y/b;%y轴间隔大约为9.9876e-05,可以设置为0.01,如果想要根为精确,可以设置为0.001、0.0001
%% 重构三维数据,画图
%间隔为 0.05的时候,X Y数据为 *****×****,  电脑一般的,将间隔调大
%间隔为    1的时候,X Y数据为 ***×***,    电脑  好的,将间隔调小
[X,Y]=meshgrid(xmin:1:xmax,ymin:1:ymax);%将x、y轴网格化,重构用于画图x、y轴数据
Z=griddata(xRow,yCol,z,X,Y);%插值,重构用于画图的Z轴数据
clear a b xmax xmin ymin ymax xRow yCol z;
mesh(X,Y,Z)

给学matlab的人,包括我自己一个勉励:路漫漫其修远兮,吾将上下而求索。

  • 107
    点赞
  • 580
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 67
    评论
Matlab中,可以使用contour3函数来创建三维立体绘图。该函数可以绘制具有不同高度的等高线,并将等高线投影到x-y平面上。下面是一个例子: ```matlab [x, y = meshgrid(-3:0.1:3); z = 3*(1-x).^2.*exp(-(x.^2) - (y-1).^2) -10* (x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) - 1/3*exp(-(x-1).^2 - y.^2); contour3(x, y, z); xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); ``` 在这个例子中,我们首先使用meshgrid函数创建了网格数据,然后根据这些数据计算出z坐标的值。最后,我们使用contour3函数绘制了等高线图,并通过xlabel、ylabel和zlabel函数添加了坐标轴标签。 此外,你还可以使用shading函数来调整绘图的颜色模式。shading函数有三种模式可供选择:faceted、flat和interp。faceted是默认的模式,flat在faceted的基础上去掉了网格线,interp在flat的基础上进行色彩的插值处理,使颜色平滑过渡。 下面是一个例子,展示了如何使用mesh和surf函数创建三维立体图: ```matlab [x, y = meshgrid(-5:0.5:5); z = sin(sqrt(x.^2 + y.^2)) ./ (sqrt(x.^2 + y.^2) + 1e-12); subplot(1, 2, 1) mesh(x, y, z); xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); axis vis3d; title('mesh(x, y, z)'); subplot(1, 2, 2) surf(x, y, z); xlabel('x轴'); ylabel('y轴'); zlabel('z轴'); axis vis3d; title('surf(x, y, z)'); ``` 在这个例子中,我们使用meshgrid函数创建了网格数据,并计算出z坐标的值。然后,我们使用mesh函数绘制了线框图,使用surf函数绘制了平滑表面图,并使用subplot函数将两个图形放在一张图上。 希望这些例子能帮助你开始绘制Matlab中的三维立体图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 67
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心网千结

若有所帮助,请点赞支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值