我是靠谱客的博主 灵巧招牌,最近开发中收集的这篇文章主要介绍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

% 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 数组 存储矩阵。函数

7d5f2b92c0fc394de7390f1993e6e568.png

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三维数据画图和等高线数据提取所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部