MATLAB - 在一个图中绘制多个曲面拟合

MATLAB - Plot multiple surface fits in one figure

我有 3 组 3D 坐标,每组都安装了平面。现在,我想在一张图中绘制所有数据点和 3 个平面。

到目前为止,我有以下功能:

function [fitresult, gof] = create_fit(xx, yy, zz, grp)

[xData, yData, zData] = prepareSurfaceData( xx, yy, zz );

ft = fittype( 'poly11' );
opts = fitoptions( ft );
opts.Lower = [-Inf -Inf -Inf];
opts.Upper = [Inf Inf Inf];

hold on;
% figure( 'Name', 'fit1' );
[fitresult, gof] = fit( [xData, yData], zData, ft, opts );
h = plot( fitresult, [xData, yData], zData);
if grp == 1
    colormap(hot);
elseif grp == 2
    colormap(cool);
else
    colormap(grey);
end

legend( h, 'fit1', 'zz vs. xx, yy', 'Location', 'NorthEast' );

xlabel( 'xx' );
ylabel( 'yy' );
zlabel( 'zz' );
grid on

但是,这有两个问题:

  1. 平面在单独绘制时会根据也与它们一起绘制的数据点进行缩放。当平面绘制在一起时,它们的缩放比例很差,数据点会聚成一个小斑点(与平面相比非常小) 我尝试用 axis([-0.04 0.04 -0.04 0.04 -0.04 0.04 -1 1]); 解决这个问题,但它是硬编码的,看起来还是有点不对劲。

  2. colormap命令似乎只在第一次调用时起作用。因此,所有的平面都是蓝色的。如何为每个平面和适合该平面的点着色?

  3. 这是绘制多个平面的最佳方式吗?

编辑

这是我最初回答的编辑版本。 plot 的输出是一个二元图形对象,因此您必须分别调用 h(1)h(2) 来设置平面和数据点的属性。

函数代码如下:

function [fitresult, gof, h] = create_fit(xx, yy, zz, color)

[xData, yData, zData] = prepareSurfaceData( xx, yy, zz );

ft = fittype( 'poly11' );
opts = fitoptions( ft );
opts.Lower = [-Inf -Inf -Inf];
opts.Upper = [Inf Inf Inf];

hold on;
[fitresult, gof] = fit( [xData, yData], zData, ft, opts );

h = plot( fitresult, [xData, yData], zData);

set(h(1), 'FaceColor', color);
set(h(2), 'MarkerFaceColor', color, 'MarkerEdgeColor', 'k');

这里是调用函​​数的示例脚本:

% Define sample data
N = 20;
x = rand(1,N);
y = rand(1,N);
z = rand(1,N);

% Call the function, specify color
[f1, gof1, h1] = create_fit(x, y, z, 'r');
[f2, gof2, h2] = create_fit(x, y.^10, z, 'g');
[f3, gof3, h3] = create_fit(x.^10, y, z, 'b');

% Figure adjustments
xlabel( 'xx' );
ylabel( 'yy' );
zlabel( 'zz' );
view(3)
grid on

xlim([min(x) max(x)]);
ylim([min(y) max(y)]);
zlim([min(z) max(z)]);

结果: