如何将EXCEL里面的大量数据导入MATLAB并且作出三维曲面图

#这个问题应该分两种情况讨论,即:

①EXCEL表格文件中不包含X轴和Y轴的数据,它里面的值实质上表示它在三维曲面上Z的值,而它的坐标(行,列)表示它在三维曲面上X、Y的坐标。如下图:

《如何将EXCEL里面的大量数据导入MATLAB并且作出三维曲面图》

②EXCEL表格文件中包含三组数据,即包含三个维度的取值。点在三维曲面上X轴的取值,Y轴的取值,Z轴的取值,这个最容易理解,也最容易处理。如下图:

《如何将EXCEL里面的大量数据导入MATLAB并且作出三维曲面图》

 ##############################手动分割线##############################

#首先我们先来讨论第一种情况,即EXCEL表格文件中不包含X轴和Y轴的数据。

#那么我们面临如下的几个问题:

##①MATLAB如何读取EXCEL表格中的数据

##②这些数据在MATLAB中是以一个矩阵的形式存在,那么如何用一个矩阵画出三维曲面图

##③已知一个矩阵,分别以行、列数为X,Y轴的坐标,矩阵元素做Z轴坐标,做一个三维的图像,该如何去实现?

#话不多说,直接上代码吧。

clear;%清除工作空间中的所有变量

clc;%清除命令窗口中的所有代码

[num]=xlsread('E:\date02.csv')%xlsread()函数
%-----------------------手动分割线------------------------------%
%xlsread()函数的讲解:
%书写语法结构
%     [num,txt,raw]=xlsread('C:\Users\Administrator\Desktop\test\a.xls')
%其中num返回的是excel中的数据,
%其中txt输出的是文本内容,
%而raw输出的是未处理数据
%For example(例如):
%有一个这样的表格
%     A    B    C    D    E
% 1  一   二   三   四   五
% 2  11   22   33   44   55
% 3  66   77   88   99   00
% 4  55   44   33   22   77
%
%那么输出[num]\[txt]\[raw]的结果分别是:
%    num=
%           11   22   33   44   55
%           66   77   88   99   00
%           55   44   33   22   77
%
%    txt=      
%           '一'   '二'   '三'   '四'   '五'
%           
%    raw=     
%            '一'   '二'   '三'   '四'   '五'
%             11     22     33     44     55
%             66     77     88     99     00
%             55     44     33     22     77   
%
%一般情况下,我们读取的是excel中的数据,所以可以直接用[num],只输出数据矩阵便可。
%
%那么如何读取指定sheet中的数据呢?
%如果想读取excel中的第二个sheet中的数据,可以输入下面命令
%[num]=xlsread('C:\Users\Administrator\Desktop\test\a.xls',2)
%当然默认情况下是读取第一个sheet中的数据,也就是参数默认为1
%
%那么如何读取指定单元格中的数据呢?
%[num]=xlsread('C:\Users\Administrator\Desktop\test\a.xls',2,'A2:C5')
%其中A2:C5就代表了读取A2到C5这一个矩形框区域内的数据
%A:C就代表了读取A到C这三列的数据
%2:4就代表了读取2到4这三行的数据
%-------------------------手动分割线------------------------------%

z=[num]%把矩阵[num]的值赋给z

[x y]=meshgrid(1:size(z,1),1:size(z,2));%根据序号生成x,y矩阵
%meshgrid()函数就是用来生成两个矩阵的函数
%-----------------------手动分割线------------------------------%
%meshgrid是MATLAB中用于生成网格采样点的函数。
%在使用MATLAB进行3-D图形绘制方面有着广泛的应用。
%
% meshgrid就是把各个点的x坐标独立出来,
%把这个独立出来的x坐标放到一个矩阵当中,设为X~~
%然后再把各个点的y坐标也独立出来,
%把这个独立出来的y坐标也放到一个矩阵当中,设为Y~~
%这样对应的x、y结合,便表示了上面的坐标 矩阵。
%
%上面的描述,我们可以知道,meshgrid返回的两个矩阵X、Y必定是行数、列数相等的 
%(即X、Y两个矩阵都有相同的行数,和相同的列数)
%
%[X,Y] =  meshgrid(x,y)    // 这个语句是用的最多的语句
%而我们今天用的这句[x y]=meshgrid(1:size(z,1),1:size(z,2));
%记住就好了,目前我也看不懂啥意思,就是根据序号生成x,y矩阵
%-----------------------手动分割线------------------------------%

xx=x(:);%将矩阵转换为向量
yy=y(:);%因为后面的scatter3函数中xx,yy,zz要为长度相同的向量
zz=z(:);%注意:一是要长度相同,二就是必须是向量

scatter3(xx,yy,zz,'b'); %根据三个向量,也就是一些坐标点作出散点图
%-----------------------手动分割线------------------------------%
%##scatter3()函数
%###但是讲scatter3()函数之前我想先讲scatter()函数
%####scatter()函数
% scatter函数基本用法
% scatter(x,y)
% scatter(x,y,sz)
% scatter(x,y,sz,c)
% scatter(___,'filled')
% scatter(___,mkr)
% scatter(___,Name,Value)
% scatter(ax,___)
% scatter(x,y)    在向量 x 和 y 指定的位置创建一个包含圆形的散点图。
%                 该类型的图形也称为气泡图。
% scatter(x,y,sz)   指定圆大小。要绘制大小相等的圆圈,请将 sz 指定为标量。
%                   要绘制大小不等的圆,请将 sz 指定为长度等于 x 和 y 的长度的向量。
% scatter(x,y,sz,c)   指定圆颜色。要以相同的颜色绘制所有圆圈,
%                     请将 c 指定为颜色名称或 RGB 三元组。
%                     要使用不同的颜色,请将 c 指定为向量或由 RGB 三元组组成的三列矩阵。
% scatter(___,'filled') 填充圆形。可以将 'filled' 选项与前面语法中的任何输入参数组合一起使用。
% scatter(___,mkr)       指定标记类型。
% scatter(___,Name,Value) 使用一个或多个名称-值对组参数修改散点图。
%                         例如,'LineWidth',2 将标记轮廓宽度设置为 2 磅。
% scatter(ax,___)     将在 ax 指定的坐标区中,而不是在当前坐标区中绘制图形。
%                     选项 ax 可以位于前面的语法中的任何输入参数组合之前。
% s = scatter(___)   返回 Scatter 对象。在创建散点图后,以后可使用 s 对其进行修改。
%###scatter3函数和scatter函数用法一模一样,只是多加了一个维度而已。
%scatter3()函数用法
% scatter3(X,Y,Z)
% scatter3(X,Y,Z,S)
% scatter3(X,Y,Z,S,C)
% scatter3(___,'filled')
% scatter3(___,markertype)
% scatter3(___,Name,Value)
% scatter3(ax,___)
% h = scatter3(___)
% scatter3(X,Y,Z) 在向量 X、Y 和 Z 指定的位置显示圆圈。
% scatter3(X,Y,Z,S) 使用 S 指定的大小绘制每个圆圈。要绘制大小相等的圆圈,请将 S 指定为标量。
%                   要绘制具有特定大小的每个圆,请将 S 指定为向量。
% scatter3(X,Y,Z,S,C) 使用 C 指定的颜色绘制每个圆圈。如果 C 是 RGB 三元组,
%                     或者是包含颜色名称的字符向量或字符串,则使用指定的颜色绘制所有圆圈。
%                     如果 C 是一个三列矩阵,其中 C 中的行数等于 X、Y 和 Z 的长度,
%                     则 C 的每行指定相应圆圈的 RGB 颜色值。
%       如果 C 是长度与 X、Y 和 Z 的长度相同的向量,则 C 中的值线性映射到当前颜色图中的颜色。
% scatter3(___,'filled')   使用前面的语法中的任何输入参数组合填充这些圆。
% scatter3(___,markertype) 指定标记类型。
% scatter3(___,Name,Value) 使用一个或多个名称-值对组参数修改散点图。
% scatter3(ax,___)         将图形绘制到 ax 指定的坐标区中,而不是当前坐标区 (gca) 中。
%                          选项 ax 可以位于前面的语法中的任何输入参数组合之前。
% h = scatter3(___) 返回 Scatter 对象。在创建散点图后,可使用 h 修改其属性。
%
%-----------------------手动分割线------------------------------%
%注意其中的k是MATLAB中形状颜色的一种
%% Matlab的plot的线形、marker的形状、颜色
%% -	Solid line (default)
%% --	Dashed line
%% :	Dotted line
%% -.	Dash-dot line
%% 
%%   Marker 	Description
%%    o   	      Circle
%%    +	         Plus sign
%%    *	          Asterisk
%%    .	           Point
%%    x	           Cross
%%    s	          Square
%%    d	          Diamond
%%    ^	    Upward-pointing triangle
%%    v	   Downward-pointing triangle
%%    >	    Right-pointing triangle
%%    <	     Left-pointing triangle
%%    p	          Pentagram
%%    h	           Hexagram
%%
%%   Color  	Description
%%     y        yellow
%%     m        magenta
%%     c        cyan
%%     r        red
%%     g        green
%%     b        blue
%%     w        white
%%     k        black
%-----------------------手动分割线------------------------------%

%[X,Y,Z]=griddata(xx,yy,zz,linspace(min(xx),max(xx))',linspace(min(yy),max(yy)),'nearest');
%邻近点插值
%[X,Y,Z]=griddata(xx,yy,zz,linspace(min(xx),max(xx))',linspace(min(yy),max(yy)),'linear');
%线性插值
%[X,Y,Z]=griddata(xx,yy,zz,linspace(min(xx),max(xx))',linspace(min(yy),max(yy)),'cubic');
%三次插值
[X,Y,Z]=griddata(xx,yy,zz,linspace(min(xx),max(xx))',linspace(min(yy),max(yy)),'v4');
%格点样条函数插值
%-----------------------手动分割线------------------------------%
%##griddata()函数
% matlab中的插值函数 griddata函数
% [X,Y,Z]=griddata(x,y,z,linspace(min(x),(max(x),m)',linspace(min(y),(max(y),n),'v4')
% 其中m,n代表分割数目,如果数据量太大,分隔数目就要取得大一点,否则很卡
% 
% griddata 调用方法:
% ZI = griddata(x,y,z,XI,YI)
% [XI,YI,ZI] = griddata(x,y,z,XI,YI)
% [...] = griddata(...,method)
% [...] = griddata(...,method,options)
% method 的值 为
% 'linear'  -- 即,以三角形为基础的线性内插
% 'cubic'   -- 即,以三角形为基础的三次方程内插
% 'nearest' -- 即,用最邻近的点 内插
% 'v4'-- -- -- 即,MATLAB 4 格点样条函数内插
% 默认'linear' 线性内插
% 三角形为基础,就是按Delaunay方法先找出内插点四周的3个点,构成三角形,内插点在三角形内。
% 然后线性内插,或三次方程内插.
% 'cubic' 和 'v4' 插值结果构成的曲面较光滑,'linear'和 'nearest' 插值结果
% 构成的曲面不光滑不连续。
% 
%-----------------------手动分割线------------------------------%
pcolor(X,Y,Z);shading interp%伪彩色图
figure,contourf(X,Y,Z) %等高线图
figure,surf(X,Y,Z);%三维曲面
figure,meshc(X,Y,Z)%剖面图
view(0,0); 
figure,meshc(X,Y,Z);%s三维曲面(浅色)+等高线
hidden off;

 #当然在我们把EXCEL表格中的数据提取到MATLAB中,放入到矩阵中后,我们还有另外一种作三维曲面的方法。代码如下(这段代码中的函数详细讲解,下次再讲了,码累了,〒▽〒):

clear;
clc;
[num]=xlsread('E:\date02.csv')
z=[num]
subplot(1,2,1)
x=0:1:15;
y0=0:1:23;
y=y0';
surf(x,y,z);
subplot(1,2,2)
x1=0:0.1:15;
y01=0:0.1:23;
y1=y01';
z1=interp2(x,y,z,x1,y1,'spline');
surf(x1,y1,z1)

最后出来的效果图如下:

《如何将EXCEL里面的大量数据导入MATLAB并且作出三维曲面图》

图 一

《如何将EXCEL里面的大量数据导入MATLAB并且作出三维曲面图》图 二

《如何将EXCEL里面的大量数据导入MATLAB并且作出三维曲面图》

 图三

##############################手动分割线##############################

第二种情况我下一次分享再讲吧

    原文作者:Li_Ctbai
    原文地址: https://blog.csdn.net/m0_60629941/article/details/120367613
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞