You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用不等尺寸向量数据创建Surface Plot(曲面图)

如何用给定MATLAB数据创建曲面图

嘿,我来帮你搞定这个MATLAB曲面图的问题~首先得明确:MATLAB的surf(曲面图)函数需要三个同维度的二维矩阵:X和Y表示网格坐标,Z表示对应网格点的高度值。根据你提供的数据,我分两种常见场景来讲解:

场景1:将z值作为Y轴,样本索引作为X轴,n/m作为高度

这种场景适合你想展示不同z值下,n或m这10个样本的分布曲面:

  1. 先构造X和Y的网格矩阵:

    • X轴用样本的索引(1到10),把它扩展成4行10列的矩阵(和n/m维度一致)
    • Y轴用你的z值,把每个z值重复10次,形成4行10列的矩阵
  2. 直接调用surf函数绘制曲面,代码如下:

clc; clear all;
n1=rand(1,10); n2=rand(1,10); n3=rand(1,10); n4=rand(1,10);
m1=rand(1,10); m2=rand(1,10); m3=rand(1,10); m4=rand(1,10);
n=[n1;n2;n3;n4]; 
m=[m1;m2;m3;m4]; 
z=[0.1,0.2,0.3,0.4];

% 构造X和Y网格矩阵
X = repmat(1:10, 4, 1);  % 4行10列,每行都是1-10
Y = repmat(z', 1, 10);   % 4行10列,每列都是对应的z值

% 绘制n作为高度的曲面图
figure;
surf(X, Y, n);
xlabel('样本索引'); ylabel('z值'); zlabel('n值');
title('z值与样本索引对应的n曲面');
shading interp;  % 可选:让曲面更平滑

% 如果你想绘制m作为高度的曲面,只需要把n换成m即可
figure;
surf(X, Y, m);
xlabel('样本索引'); ylabel('z值'); zlabel('m值');
title('z值与样本索引对应的m曲面');
shading interp;

场景2:将n作为X轴,m作为Y轴,z值作为高度(拟合散点为曲面)

如果你的需求是把每个(n_k,i, m_k,i, z_k)作为三维空间中的散点,然后拟合出连续曲面,那需要先通过插值生成网格数据:

  1. 先把所有散点整理成一维数组:

    • 将n和m的4行10列矩阵转成一维,z值也对应重复10次(因为每个z对应10个点)
  2. 创建X-Y平面的网格,用griddata函数插值得到Z矩阵,再绘制曲面:

clc; clear all;
n1=rand(1,10); n2=rand(1,10); n3=rand(1,10); n4=rand(1,10);
m1=rand(1,10); m2=rand(1,10); m3=rand(1,10); m4=rand(1,10);
n=[n1;n2;n3;n4]; 
m=[m1;m2;m3;m4]; 
z=[0.1,0.2,0.3,0.4];

% 整理散点数据
x_scatter = n(:);  % 把n转成40x1的一维数组
y_scatter = m(:);  % 把m转成40x1的一维数组
z_scatter = repmat(z', 10, 1);  % 每个z值重复10次,转成40x1

% 创建X-Y网格(可以调整网格密度,比如20x20)
[x_grid, y_grid] = meshgrid(linspace(min(x_scatter), max(x_scatter), 20), ...
                           linspace(min(y_scatter), max(y_scatter), 20));

% 插值得到网格对应的Z值
z_grid = griddata(x_scatter, y_scatter, z_scatter, x_grid, y_grid, 'cubic');

% 绘制曲面
figure;
surf(x_grid, y_grid, z_grid);
xlabel('n值'); ylabel('m值'); zlabel('z值');
title('n-m-z拟合曲面');
shading interp;
hold on;
scatter3(x_scatter, y_scatter, z_scatter, 'r', 'filled');  % 可选:叠加原始散点
hold off;

小提示

  • shading interp可以让曲面颜色更平滑,提升可视化效果
  • 如果场景2的插值结果有缺失值,可以尝试更换插值方法(比如'linear'或者'nearest')

内容的提问来源于stack exchange,提问作者acoustic python

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:28:10