说明:本文中的数据是以矩阵形式保存在文本中,以行数和列数作为xy轴,数据作为z轴进行绘图。如果三个维度是单独的文本,分别导入MATLAB即可。
第一步:导入数据
方式一:
for tt = 1:1
filename = sprintf('测试数据\\Data%d.txt',tt);%生成文本名
fid_doa = fopen(filename); %打开文本
for k=1:91 %91为文本行数,根据实际文本进行修改
tline = fgetl(fid_doa); %读取一行数据
if tline==-1
break;
end
data(k,:) = sscanf(tline,'%f ');%浮点型读取
end
end
方式二:
data = importdata('测试数据\\Data%d.txt')
虽然第一种看着麻烦,但是在处理大批量数据的情况下比第二种要好用的多。解释一下第一种方式,打开文件后,fgetl函数从打开的文件中每次读取一行数据并丢弃其中的换行符。如果读取成功,则tline保存了读取到的本行文本字符串,并指向下一行,如果遇到文件末尾的结束标志(EOF),则函数返回-1,即tline值为-1。
第二步:画图
surf(x,y,z)和mesh(x,y,z)都可以。
在使用两个函数时特别需要注意,x对应z的列数,y对应z的行数,否则会因为维数不匹配报错。函数底层有说明:
must have length(x) = n and length(y) = m where [m,n] = size(Z). In this case, the vertices of the mesh lines are the triples (x(j),y(i),Z(i,j)).
xrow = 1:size(data,2);
yrow = 1:size(data,1);
surf(xrow,yrow,data);
title('test');
xlabel('X轴'),ylabel('Y轴'),zlabel('Z轴')
三维效果对比
surf绘图效果:
surf(x,y,z)
mesh绘图效果:
mesh(x,y,z)
surfl绘图效果
surfl(x,y,z) %l是light(光照)的缩写
shading interp; %flat %faceted设置为阴影显示
colormap(gray)