作者seafox (海狐狸)
看板MATLAB
标题[绘图] EXCEL 汇入 MATLAB做3D图
时间Sat Oct 24 18:57:26 2015
想请问一下各位大大....
目前已经爬过一些文章...
但我还是画不出来...
以下为我EXCEL的数据
http://imgur.com/ysOMvzF
http://i.imgur.com/ysOMvzF.jpg?1
A行 为 波长 做为 X轴
1列 为 时间 做为 Z轴
B行到之後BGX行 共1800组的数据 是每个波长之强度变化 做为 Y 轴
利用这三轴去做3D图该如何写CODE呢?
要做与下方类似的图:
http://imgur.com/KqUhTl9
http://i.imgur.com/KqUhTl9.jpg?1
(这是我用EXCEL做的3轴曲面图,
但EXCEL 与 ORIGIN 都有限制数据组数....
因此必须用MATLAB去做....
恳请各位帅哥以及正妹帮忙小弟了
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.117.59.174
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1445684248.A.777.html
※ 编辑: seafox (140.117.59.174), 10/24/2015 19:01:17
1F:→ seafox: 附加图的方式...好像有点不对-......- 10/24 19:01
※ 编辑: seafox (140.117.59.174), 10/24/2015 19:02:51
※ 编辑: seafox (140.117.59.174), 10/24/2015 19:03:05
2F:→ celestialgod: 直接mesh不是吗= =? 10/24 20:02
3F:→ celestialgod: 你有/3D过吗? 10/24 20:02
4F:→ seafox: 直接mesh...? 10/24 20:40
5F:→ seafox: 这样程式码要怎麽写0.0 10/24 20:41
6F:→ seafox: 说实在...小弟新手一枚-.- 10/24 20:43
7F:→ celestialgod: 想当伸手牌,请洽google 10/24 21:12
8F:→ tn00364361: Google "meshgrid" 10/25 06:30
9F:推 petersung999: 可能会需要interp shading 10/25 08:17
目前是这样写出来~
但XY轴的图可以显示
但是Z轴部分还是卡关......
SPR=xlsread('SPR.xlsx');
x=SPR(:,1) ; %x轴 时间项
y=SPR(:,2:1801); %y轴 所有的数据
z=SPR(1,:); %总共多少的数据
xlabel('Wavelength (nm) ');
ylabel('Reflected Intensity ');
zlabel('time(s)');
mesh (x,y,z)
※ 编辑: seafox (140.117.59.174), 10/25/2015 17:43:42
10F:→ celestialgod: 再加上colorbar就好了 10/25 17:54
11F:→ seafox: 感谢各位~努力尝试中:) 10/26 18:25
目前做出来是呈现这样的3D图形
http://imgur.com/Imw3VD0
我是用mesh 去做
但time部分~我的时间是0.5秒记一次共900秒 1800组...如何把time部分改成0~900呢?
而波长部分~里面数据是400~800nm,但显示上是0~600 这部分该如修正?
※ 编辑: seafox (140.117.59.174), 10/26/2015 18:29:52
12F:→ celestialgod: 没资料不知道从何帮起= = 10/26 18:42
13F:→ seafox: 资料就是最上面那一张图0.0 10/26 18:44
15F:→ seafox: meshgrid 昨天有测试过~但跑不出来...(记忆体不足...) 10/26 18:48
16F:→ celestialgod: 没空一个个key= = 10/26 18:58
17F:→ celestialgod: meshgird应该不用 10/26 18:59
以下这是EXCEL 修正过後的档案:
https://drive.google.com/file/d/0B__H8DAs0cCzVTJFS3hZR3VKaGs/view?usp=sharing
第一种方式:
在MATLAB 中直接用
mesh(SPR.xlsx)
xlabel('time(s) ');
ylabel('Wavelength (nm) ');
zlabel('Reflected Intensity');
则会出现刚刚那一张图
http://imgur.com/Imw3VD0
而问题点就是刚刚那两个....
第二种方式:
x=SPR(:,1) ; %x轴 时间项
y=SPR(:,2:1801); %y轴 所有的数据
z=y(1,:); %总共多少的数据
xlabel('time(s) ');
ylabel('Wavelength (nm) ');
zlabel('Reflected Intensity');
plot3 (x,y,z)
这时候会出现以下这个:
Error using plot3
Vectors must be the same length.
目前还在烦恼该如何修正.....
※ 编辑: seafox (140.117.59.174), 10/26/2015 19:43:06
18F:→ seafox: 第一个是我直接用mesh去做3d 出现的问题 10/26 19:43
19F:→ seafox: 第二方式 用plot(x,y) 可以呈现2轴~但用plot3 就卡住了... 10/26 19:44
20F:→ celestialgod: 待我瞧瞧 10/26 19:46
刚刚第一种方式~
我有找到修正方式
目前已经修改好 TIME轴
但剩下一个问题 就是波长轴卡住无法修正......
如图:
http://i.imgur.com/PsIwXso.jpg
※ 编辑: seafox (140.117.59.174), 10/26/2015 20:40:58
22F:→ seafox: 波长单位是400~800 卡在700位置~ 10/26 20:41
25F:→ celestialgod: 你的轴应该搞错了~"~ 10/26 21:33
27F:→ seafox: 我研究一下您的code 0.0 10/26 21:40
28F:→ seafox: 了解!!感谢c大大!! 应该是错在我都用":" 10/26 21:41
29F:→ seafox: 我在微调一下 orz 10/26 21:42
30F:→ seafox: 哦..我发现我真的把xyz轴搞混了-.- 感谢c大的提醒... 10/26 21:56
SPR=xlsread('SPR.xlsx');
x=SPR(2:end,1);
y=SPR(1,2:end);
z=SPR(2:end,2:end);
[Y, X] = meshgrid(y, x);
mesh(X, Y, z)
xlabel('time(s)');
ylabel('Wavelength (nm)');
zlabel('Reflected Intensity');
这是我目前修正後所用的CODE ~
修正完的图形:
http://i.imgur.com/hiYdPQT.jpg
感谢C大帮忙纠正错误 ORZ
※ 编辑: seafox (140.117.59.174), 10/26/2015 22:13:21
31F:→ celestialgod: 差不多了,剩下colorbar条一条而已 10/26 22:24
32F:→ seafox: 恩~那个我已经放上去了~感谢大大的提醒:) 10/26 22:47