2015-03-01 2 views
1

У меня есть 3 набора 3D-координат, и у меня есть установленные плоскости для каждого набора. Теперь я хочу построить все точки данных и 3 плоскости на одном рисунке.MATLAB - Плоская многократная поверхность подходит для одной фигуры

До сих пор, у меня есть следующие функции:

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 

Тем не менее, есть 2 проблемы с этим:

  1. Плоскости, при построении графика по отдельности масштабируются в соответствии с точками данных, которые также строятся с ними. Когда плоскости рисуются вместе, они плохо масштабируются, а точки данных сходятся к небольшому блобу (очень малый масштаб по сравнению с плоскостями) the points have converged to a small area, but maintain their shape when zoomed in Я попытался устранить проблему с axis([-0.04 0.04 -0.04 0.04 -0.04 0.04 -1 1]);, но она жестко закодирована и по-прежнему выглядит немного выкл. after axis command

  2. Команда colormap, похоже, работает только при вызове в первый раз. Следовательно, все плоскости оказываются синими. Как я могу покрасить каждую плоскость и точки, установленные для этой плоскости по-разному?

  3. Это лучший способ построить несколько самолетов?

ответ

1

Редактировать

Вот отредактированная версия моего первоначального ответа. Выходной сигнал 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)]); 

и результат:

enter image description here

+0

Работает min-max. Однако для «FaceColor» появляется следующая ошибка: «Аргумент« FaceColor »не соответствует ни одному действительному параметру синтаксического анализатора. – vinayakshukl

+0

Также есть ли способ, в котором каждый набор точек имеет разный цвет? Это поможет визуализировать, насколько хорошо работает фитинг, а также выявить выбросы. – vinayakshukl

+0

ОК, извините, но поскольку у нас нет всей информации, которую вы имеете (значения 'xx',' grp', ...), я не могу проверить свои ответы. Как насчет замены '' Facecolor'' '' color''? – Ratbert

Смежные вопросы