概述
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
% 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 数组 存储矩阵。函数
RGB 格式
maltab 的 RGB 不是 [255 255 255] 形式,而是 [1 1 1]。对应 RGB 数值除以255便可。
spa
3 代码实现
clear;clc;close all;
%% data input
data1 = importdata('sta_1');
data2 = importdata('sta_2');
data3 = importdata('sta_3');
data4 = importdata('sta_4');
color = [0.8588 0.2745 0.19216; 0.8941 0.6627 0.1961; 0 0.5412 0.7765; 0.6275 0.2 0.5765]; % 自定义颜色 red, yellow, blue, purple
x = cell(4,1);y = cell(4,1);z = cell(4,1);
% cell元胞数组,能够存数组.目的是利用cell循环做图.
% x{i} = data{i}(:,1)
% 第i组数据(xyz均为1维数据)分别存入X{i},Y{i},Z{i}
for i = 1:4
eval(['x{',num2str(i) '}= data' num2str(i) '(:,1)']); % index 中调用变量,须要用到num2str()
eval(['y{',num2str(i) '}= data' num2str(i) '(:,2)']);
eval(['z{',num2str(i) '}= data' num2str(i) '(:,3)']);
end
real = [0.610293 0.559696 0.614283 0.63131]; % 须要画等高线的高度
%% fig.1: sactter
dot1 = {'s' 'o' '^' 'd'}; % dot shape
figure;
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); % 添加一张网格平面
end
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');
最后
以上就是灵巧招牌为你收集整理的matlab利用已知数据画图三维,Matlab三维数据画图和等高线数据提取的全部内容,希望文章能够帮你解决matlab利用已知数据画图三维,Matlab三维数据画图和等高线数据提取所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复