【Matlab绘图进阶第8弹】Matlab绘制三维曲面拟合图

           三维曲面拟合图是通过三维实验数据点进行曲面拟合,可以更加清晰直观的显示X、Y、Z三个坐标点的分布情况,三维曲面图常见于工程技术方面,运动轨迹的显示,温度分布的显示等。下面一起跟着南同学进行三维曲面图的绘制吧!

成图效果展示

【Matlab绘图进阶第8弹】Matlab绘制三维曲面拟合图_第1张图片

【Matlab绘图进阶第8弹】Matlab绘制三维曲面拟合图_第2张图片

【Matlab绘图进阶第8弹】Matlab绘制三维曲面拟合图_第3张图片

【Matlab绘图进阶第8弹】Matlab绘制三维曲面拟合图_第4张图片

​绘图三步走

  1. 取色

    取色的核心是获取0-1之间的RGB值矩阵、在Matlab中对于0-255之间的颜色数值需要进行归一化处理。

  2. 数据准备

    三维曲面拟合图数据需要实验数据格式为X-Y-Z,即三维空间的坐标数据,当然也可以用到第四维度数据特征,用来表征颜色深浅。

  3. 函数使用

    三维曲面拟合图主要用到mesh函数与surf函数,本文主要用mesh函数绘制。

​  1. 取色

此次取色步骤和之前取色过程不同、三维散点图需要很多种颜色渐进、即colormap,大小约为n*3的数据矩阵,需要选取两种基础色进行线性插值、具体基础色如下图:

【Matlab绘图进阶第8弹】Matlab绘制三维曲面拟合图_第5张图片

接着对两种颜色进行线性插值、生成n组RGB值,实现一个颜色柱的绘制、从而得到一个完整的色系。生成后的色系图如下:

【Matlab绘图进阶第8弹】Matlab绘制三维曲面拟合图_第6张图片

如上图所示、由两种基础色——完整的色彩柱就生成啦,大小为n*3,并将其保存为mycolor1.mat文件用于matlab读取,色系生成代码如下:

%% 生成颜色柱
clc;
clear;
figure('color',[1 1 1]);
color1 = [0 176 240]./255; % 第一种颜色
color2 = [226 240 217]./255;% 第二种颜色
n=64;% 颜色数据点
R1 =(linspace(color1(1),color2(1),n))';
G1 =(linspace(color1(2),color2(2),n))';
B1 =(linspace(color1(3),color2(3),n))';
mycolor2 = [R1,G1,B1];
colormap(mycolor2);
c= colorbar;
save mycolor2
​  2. 数据准备

此次绘图教程的数据主要包括四个维度,分别为X、Y、Z、C四个维度数据,其中第四个维度为特征数据,用来表征颜色深浅,这列数据也可以用Z轴表示,具体数据代码如下:

%获取颜色柱数据与实验数据
clc;
clear;
load mycolor1.mat
load mycolor2.mat
[data,str,all] = xlsread('XYZ2.xlsx');%三维数据文件 把你的数据复制到XYZ文件替换数据就行
x=data(:,1);
y=data(:,2);
z=data(:,3);
c=data(:,4);%用来表示颜色特征
​  3. 函数使用

绘制三维散点图主要函数为mesh、通过Griddata函数生成三维网格所需要的数据,三维数据插值方法主要分为四种:'linear',‘nearest’,‘cubic’,‘natural’。大家可以尝试不同的插值方法,本文主要以natural为例子,绘图代码如下:

method_fit = 'natural';
%插值生成网格化数据
[XX,YY,Z]=griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),method_fit);
[X,Y,C]=griddata(x,y,c,linspace(min(x),max(x))',linspace(min(y),max(y)),method_fit);
figure('color',[1 1 1]);
mesh(XX,YY,Z,C);%三维曲面
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
title('三维数值拟合曲线');
colormap(autumn);
colorbar;
h = colorbar;%右侧颜色栏
set(get(h,'label'),'string','z值');%给右侧颜色栏命名
grid on;
%用来调整三维视角角度
view(157,11);

综上所述,绘图完成代码如下:

%% matlab绘制三维曲面图
%获取颜色柱数据与实验数据
clc;
clear;
load mycolor1.mat
load mycolor2.mat
[data,str,all] = xlsread('XYZ2.xlsx');%三维数据文件 把你的数据复制到XYZ文件替换数据就行
x=data(:,1);
y=data(:,2);
z=data(:,3);
c=data(:,4);%用来表示颜色特征
method_fit = 'cubic';
%插值生成网格化数据
[XX,YY,Z]=griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),method_fit);
[X,Y,C]=griddata(x,y,c,linspace(min(x),max(x))',linspace(min(y),max(y)),method_fit);
figure('color',[1 1 1]);
mesh(XX,YY,Z,C);%三维曲面
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
title('三维数值拟合曲线');
colormap(autumn);
colorbar;
h = colorbar;%右侧颜色栏
set(get(h,'label'),'string','z值');%给右侧颜色栏命名
grid on;
%用来调整三维视角角度
view(157,11);

这样三维曲面拟合图就做完啦,赶快收藏起来吧!!!!

【Matlab绘图进阶第8弹】Matlab绘制三维曲面拟合图_第7张图片

【Matlab绘图进阶第8弹】Matlab绘制三维曲面拟合图_第8张图片

【Matlab绘图进阶第8弹】Matlab绘制三维曲面拟合图_第9张图片

  完整代码资料获取方式

完整源代码三维曲面拟合资料

你可能感兴趣的:(matlab,开发语言)