当前位置:   article > 正文

如何将EXCEL里面的大量数据导入MATLAB并且作出三维曲面图_matlab读取excel数据绘制曲面图

matlab读取excel数据绘制曲面图

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

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

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

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

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

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

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

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

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

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

  1. clear;%清除工作空间中的所有变量
  2. clc;%清除命令窗口中的所有代码
  3. [num]=xlsread('E:\date02.csv')%xlsread()函数
  4. %-----------------------手动分割线------------------------------%
  5. %xlsread()函数的讲解:
  6. %书写语法结构
  7. % [num,txt,raw]=xlsread('C:\Users\Administrator\Desktop\test\a.xls')
  8. %其中num返回的是excel中的数据,
  9. %其中txt输出的是文本内容,
  10. %而raw输出的是未处理数据
  11. %For example(例如):
  12. %有一个这样的表格
  13. % A B C D E
  14. % 1 一 二 三 四 五
  15. % 2 11 22 33 44 55
  16. % 3 66 77 88 99 00
  17. % 4 55 44 33 22 77
  18. %
  19. %那么输出[num]\[txt]\[raw]的结果分别是:
  20. % num=
  21. % 11 22 33 44 55
  22. % 66 77 88 99 00
  23. % 55 44 33 22 77
  24. %
  25. % txt=
  26. % '一' '二' '三' '四' '五'
  27. %
  28. % raw=
  29. % '一' '二' '三' '四' '五'
  30. % 11 22 33 44 55
  31. % 66 77 88 99 00
  32. % 55 44 33 22 77
  33. %
  34. %一般情况下,我们读取的是excel中的数据,所以可以直接用[num],只输出数据矩阵便可。
  35. %
  36. %那么如何读取指定sheet中的数据呢?
  37. %如果想读取excel中的第二个sheet中的数据,可以输入下面命令
  38. %[num]=xlsread('C:\Users\Administrator\Desktop\test\a.xls',2)
  39. %当然默认情况下是读取第一个sheet中的数据,也就是参数默认为1
  40. %
  41. %那么如何读取指定单元格中的数据呢?
  42. %[num]=xlsread('C:\Users\Administrator\Desktop\test\a.xls',2,'A2:C5')
  43. %其中A2:C5就代表了读取A2到C5这一个矩形框区域内的数据
  44. %A:C就代表了读取A到C这三列的数据
  45. %2:4就代表了读取2到4这三行的数据
  46. %-------------------------手动分割线------------------------------%
  47. z=[num]%把矩阵[num]的值赋给z
  48. [x y]=meshgrid(1:size(z,1),1:size(z,2));%根据序号生成x,y矩阵
  49. %meshgrid()函数就是用来生成两个矩阵的函数
  50. %-----------------------手动分割线------------------------------%
  51. %meshgrid是MATLAB中用于生成网格采样点的函数。
  52. %在使用MATLAB进行3-D图形绘制方面有着广泛的应用。
  53. %
  54. % meshgrid就是把各个点的x坐标独立出来,
  55. %把这个独立出来的x坐标放到一个矩阵当中,设为X~~
  56. %然后再把各个点的y坐标也独立出来,
  57. %把这个独立出来的y坐标也放到一个矩阵当中,设为Y~~
  58. %这样对应的x、y结合,便表示了上面的坐标 矩阵。
  59. %
  60. %上面的描述,我们可以知道,meshgrid返回的两个矩阵X、Y必定是行数、列数相等的
  61. %(即X、Y两个矩阵都有相同的行数,和相同的列数)
  62. %
  63. %[X,Y] = meshgrid(x,y) // 这个语句是用的最多的语句
  64. %而我们今天用的这句[x y]=meshgrid(1:size(z,1),1:size(z,2));
  65. %记住就好了,目前我也看不懂啥意思,就是根据序号生成x,y矩阵
  66. %-----------------------手动分割线------------------------------%
  67. xx=x(:);%将矩阵转换为向量
  68. yy=y(:);%因为后面的scatter3函数中xx,yy,zz要为长度相同的向量
  69. zz=z(:);%注意:一是要长度相同,二就是必须是向量
  70. scatter3(xx,yy,zz,'b'); %根据三个向量,也就是一些坐标点作出散点图
  71. %-----------------------手动分割线------------------------------%
  72. %##scatter3()函数
  73. %###但是讲scatter3()函数之前我想先讲scatter()函数
  74. %####scatter()函数
  75. % scatter函数基本用法
  76. % scatter(x,y)
  77. % scatter(x,y,sz)
  78. % scatter(x,y,sz,c)
  79. % scatter(___,'filled')
  80. % scatter(___,mkr)
  81. % scatter(___,Name,Value)
  82. % scatter(ax,___)
  83. % scatter(x,y) 在向量 x 和 y 指定的位置创建一个包含圆形的散点图。
  84. % 该类型的图形也称为气泡图。
  85. % scatter(x,y,sz) 指定圆大小。要绘制大小相等的圆圈,请将 sz 指定为标量。
  86. % 要绘制大小不等的圆,请将 sz 指定为长度等于 x 和 y 的长度的向量。
  87. % scatter(x,y,sz,c) 指定圆颜色。要以相同的颜色绘制所有圆圈,
  88. % 请将 c 指定为颜色名称或 RGB 三元组。
  89. % 要使用不同的颜色,请将 c 指定为向量或由 RGB 三元组组成的三列矩阵。
  90. % scatter(___,'filled') 填充圆形。可以将 'filled' 选项与前面语法中的任何输入参数组合一起使用。
  91. % scatter(___,mkr) 指定标记类型。
  92. % scatter(___,Name,Value) 使用一个或多个名称-值对组参数修改散点图。
  93. % 例如,'LineWidth',2 将标记轮廓宽度设置为 2 磅。
  94. % scatter(ax,___) 将在 ax 指定的坐标区中,而不是在当前坐标区中绘制图形。
  95. % 选项 ax 可以位于前面的语法中的任何输入参数组合之前。
  96. % s = scatter(___) 返回 Scatter 对象。在创建散点图后,以后可使用 s 对其进行修改。
  97. %###scatter3函数和scatter函数用法一模一样,只是多加了一个维度而已。
  98. %scatter3()函数用法
  99. % scatter3(X,Y,Z)
  100. % scatter3(X,Y,Z,S)
  101. % scatter3(X,Y,Z,S,C)
  102. % scatter3(___,'filled')
  103. % scatter3(___,markertype)
  104. % scatter3(___,Name,Value)
  105. % scatter3(ax,___)
  106. % h = scatter3(___)
  107. % scatter3(X,Y,Z) 在向量 X、Y 和 Z 指定的位置显示圆圈。
  108. % scatter3(X,Y,Z,S) 使用 S 指定的大小绘制每个圆圈。要绘制大小相等的圆圈,请将 S 指定为标量。
  109. % 要绘制具有特定大小的每个圆,请将 S 指定为向量。
  110. % scatter3(X,Y,Z,S,C) 使用 C 指定的颜色绘制每个圆圈。如果 C 是 RGB 三元组,
  111. % 或者是包含颜色名称的字符向量或字符串,则使用指定的颜色绘制所有圆圈。
  112. % 如果 C 是一个三列矩阵,其中 C 中的行数等于 X、Y 和 Z 的长度,
  113. % 则 C 的每行指定相应圆圈的 RGB 颜色值。
  114. % 如果 C 是长度与 X、Y 和 Z 的长度相同的向量,则 C 中的值线性映射到当前颜色图中的颜色。
  115. % scatter3(___,'filled') 使用前面的语法中的任何输入参数组合填充这些圆。
  116. % scatter3(___,markertype) 指定标记类型。
  117. % scatter3(___,Name,Value) 使用一个或多个名称-值对组参数修改散点图。
  118. % scatter3(ax,___) 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区 (gca) 中。
  119. % 选项 ax 可以位于前面的语法中的任何输入参数组合之前。
  120. % h = scatter3(___) 返回 Scatter 对象。在创建散点图后,可使用 h 修改其属性。
  121. %
  122. %-----------------------手动分割线------------------------------%
  123. %注意其中的k是MATLAB中形状颜色的一种
  124. %% Matlab的plot的线形、marker的形状、颜色
  125. %% - Solid line (default)
  126. %% -- Dashed line
  127. %% : Dotted line
  128. %% -. Dash-dot line
  129. %%
  130. %% Marker Description
  131. %% o Circle
  132. %% + Plus sign
  133. %% * Asterisk
  134. %% . Point
  135. %% x Cross
  136. %% s Square
  137. %% d Diamond
  138. %% ^ Upward-pointing triangle
  139. %% v Downward-pointing triangle
  140. %% > Right-pointing triangle
  141. %% < Left-pointing triangle
  142. %% p Pentagram
  143. %% h Hexagram
  144. %%
  145. %% Color Description
  146. %% y yellow
  147. %% m magenta
  148. %% c cyan
  149. %% r red
  150. %% g green
  151. %% b blue
  152. %% w white
  153. %% k black
  154. %-----------------------手动分割线------------------------------%
  155. %[X,Y,Z]=griddata(xx,yy,zz,linspace(min(xx),max(xx))',linspace(min(yy),max(yy)),'nearest');
  156. %邻近点插值
  157. %[X,Y,Z]=griddata(xx,yy,zz,linspace(min(xx),max(xx))',linspace(min(yy),max(yy)),'linear');
  158. %线性插值
  159. %[X,Y,Z]=griddata(xx,yy,zz,linspace(min(xx),max(xx))',linspace(min(yy),max(yy)),'cubic');
  160. %三次插值
  161. [X,Y,Z]=griddata(xx,yy,zz,linspace(min(xx),max(xx))',linspace(min(yy),max(yy)),'v4');
  162. %格点样条函数插值
  163. %-----------------------手动分割线------------------------------%
  164. %##griddata()函数
  165. % matlab中的插值函数 griddata函数
  166. % [X,Y,Z]=griddata(x,y,z,linspace(min(x),(max(x),m)',linspace(min(y),(max(y),n),'v4')
  167. % 其中m,n代表分割数目,如果数据量太大,分隔数目就要取得大一点,否则很卡
  168. %
  169. % griddata 调用方法:
  170. % ZI = griddata(x,y,z,XI,YI)
  171. % [XI,YI,ZI] = griddata(x,y,z,XI,YI)
  172. % [...] = griddata(...,method)
  173. % [...] = griddata(...,method,options)
  174. % method 的值 为
  175. % 'linear' -- 即,以三角形为基础的线性内插
  176. % 'cubic' -- 即,以三角形为基础的三次方程内插
  177. % 'nearest' -- 即,用最邻近的点 内插
  178. % 'v4'-- -- -- 即,MATLAB 4 格点样条函数内插
  179. % 默认'linear' 线性内插
  180. % 三角形为基础,就是按Delaunay方法先找出内插点四周的3个点,构成三角形,内插点在三角形内。
  181. % 然后线性内插,或三次方程内插.
  182. % 'cubic' 和 'v4' 插值结果构成的曲面较光滑,'linear'和 'nearest' 插值结果
  183. % 构成的曲面不光滑不连续。
  184. %
  185. %-----------------------手动分割线------------------------------%
  186. pcolor(X,Y,Z);shading interp%伪彩色图
  187. figure,contourf(X,Y,Z) %等高线图
  188. figure,surf(X,Y,Z);%三维曲面
  189. figure,meshc(X,Y,Z)%剖面图
  190. view(0,0);
  191. figure,meshc(X,Y,Z);%s三维曲面(浅色)+等高线
  192. hidden off;

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

  1. clear;
  2. clc;
  3. [num]=xlsread('E:\date02.csv')
  4. z=[num]
  5. subplot(1,2,1)
  6. x=0:1:15;
  7. y0=0:1:23;
  8. y=y0';
  9. surf(x,y,z);
  10. subplot(1,2,2)
  11. x1=0:0.1:15;
  12. y01=0:0.1:23;
  13. y1=y01';
  14. z1=interp2(x,y,z,x1,y1,'spline');
  15. surf(x1,y1,z1)

最后出来的效果图如下:

图 一

图 二

 图三

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/97204?site
推荐阅读
相关标签
  

闽ICP备14008679号