matlab利⽤已知数据画图三维,Matlab三维数据画图和等⾼线
数据提取
1 ⽬的
将4组三维数据,每组数据画散点图(fig1),拟合出⼀个曲⾯(fig2),并将特定Z值的等⾼线投影到XY平⾯(fig3)。数组
2 主要函数
scatter3( ) 三维散点图
scatter3(X,Y,Z,S,C)
% 向量 X、Y 和 Z 指定点的位置,都是1维数组。size(Z) = size(X) * size (Y)
% S 指定点的⼤⼩,默认50。也能够是⼀个和x,y长度同样的向量,设置不⼀样点⼤⼩不⼀样。
% 默认点的形状是圆形。正⽅形s,圆形o,上三⾓形^,菱形d
如何用matlab将已知点连线
% C 指定的颜⾊绘制每⼀个点。能够是字符串,RGB或者向量。使⽤向量能够不⼀样点颜⾊不⼀样
mesh( ) 三维⽹格图
mesh(X,Y,Z,C)
% 绘制线框⽹格
% 若是 X 和 Y 为向量,length(X) = n 且 length(Y) = m,其中 [m,n] = size(Z)。
% 矩阵 C 肯定⽹格颜⾊,⼤⼩与 Z 相同
surf( ) 三维曲⾯图
surf(X,Y,Z,C)
% 默认的曲⾯颜⾊与 Z 成⽐例
% 使⽤ C 将指定曲⾯颜⾊
% 因为原始数据点偏少,最好先⽤griddata()插⼊更多数据点
contour( ) 等⾼线图
[C,h] = contour(X,Y,Z)
% 返回等⾼线矩阵 C(包含定义等⾼线的数据)和 Contour 对象 h
% 如只想画出Z在i处的等⾼线,则调⽤ [C,h] = contour(X,Y,Z,[i,i])。再调⽤ C 便可得到该等⾼线的数据
% h 为等⾼线对象。可设置粗细、颜⾊等属性
cell 数组
多组数据绘图,我倾向使⽤循环解决。以上命令的 X,Y 都是矩阵(数组),matlab⾥能够⽤ cell 数组 存储矩阵。函数
daspect([8 5 1]); % 坐标轴xyz刻度⽐例
hold on;
grid on;
for i = 1:4
scatter3(x{i},y{i},z{i},dot1{i},'MarkerFaceColor',color(i,:),'MarkerEdgeColor',color(i,:)); end
view(40,25);
xlabel('x');ylabel('y');zlabel('z');;xlim([0 16]);ylim([0 10]); title('xyz');
set(gca,'xTick',[0:2:16],'yTick',[0:2:10],'LineWidth',2,'FontSize',20,'GridLineStyle' ,'--'); legend('1','2','3','4','location','northeast');
hold off;
% print('-depsc','-r800','fig1.eps');
%% surface
X = cell(4,1);Y = cell(4,1);Z = cell(4,1);
Xm = cell(4,1);Ym = cell(4,1);Zm = cell(4,1);
figure
daspect([8 5 1]); % 坐标轴xyz刻度⽐例
hold on;
grid on;
for i = 1:4
[X{i},Y{i},Z{i}] = griddata(x{i},y{i},z{i},linspace(-1,17)',linspace(-1,11),'v4');
C = zeros(size(X{i}));
C(:,:,1) = color(i,1);C(:,:,2) = color(i,2);C(:,:,3) = color(i,3);
surf(X{i},Y{i},Z{i},C);
% shading flat;
end
legend('1','2','3','4','location','northeast');
for i = 1:4
% shading flat;
Xm{i} = -1:17;Ym{i} = -1:17;Zm{i} = real(i)*ones(19);
Cm = zeros(size(Zm{i}));
Cm(:,:,1) = color(i,1);Cm(:,:,2) = color(i,2);Cm(:,:,3) = color(i,3);
mesh(Xm{i},Ym{i},Zm{i},Cm); % 添加⼀张⽹格平⾯
alpha(0.8); % transparency
view(40,25);
xlabel('x');ylabel('y');zlabel('z');xlim([0 16]);ylim([0 10]); title('xyz');
set(gca,'LineWidth',2,'FontSize',20,'xTick',[0:2:16],'yTick',[0:2:10],'GridLineStyle' ,'--'); hold off;
%print('-depsc','-r800','fig2.eps');
%% contour
cm = cell(4,1);
hm = cell(4,1);
figure
hold on;
for i = 1:4
[cm{i},hm{i}]=contour(X{i},Y{i},Z{i},[real(i),real(i)]);    % cm(i)保存了等⾼线的数据
set(hm{i},'color',color(i,:),'LineWidth',2); % ,'ShowText','on'
end
legend('1','2','3','4','location','northeast');
xlabel('x');ylabel('y');xlim([0 16]);ylim([0 10]);title('xyz');
set(gca,'LineWidth',2,'FontSize',20,'xtick',[0:1:16],'ytick',[0:0.5:7]);
hold off;
% print('-depsc','-r800','fig3.eps');

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。