Сложность заключается в том, что трехмерные функции построения поверхности (сетка, серфинг и т. Д.) Ищут двумерную матрицу значений z. Таким образом, чтобы использовать их, вам нужно построить такую матрицу из данных.
В настоящее время данные представляют собой море точек в трехмерном пространстве, поэтому вы должны отобразить эти точки на поверхности. Простой подход к этому состоит в том, чтобы разделить плоскость X-Y (температура-влажность) на ячейки и затем взять среднее значение всех данных Z (мощность). Вот некоторый пример кода для этого, который использует accumarray () для вычисления средних значений для каждого бина:
% Укажите размеры корзины
Tbin = 3;
Hbin = 20;
% Create binned average array
% First create a two column array of bin indexes to use as subscripts
subs = [round(Havg/Hbin)+1, round(Tavg/Tbin)+1];
% Now create the Z (power) estimate as the average value in each bin
Pest = accumarray(subs,Pavg,[],@mean);
% And the corresponding X (temp) & Y (humidity) vectors
Tval = Tbin/2:Tbin:size(Pest,2)*Tbin;
Hval = Hbin/2:Hbin:size(Pest,1)*Hbin;
% And create the plot
figure(1)
surf(Tval, Hval, Pest)
xlabel('Temperature')
ylabel('Humidity')
zlabel('Power')
title('Simple binned average')
xlim([14 24])
ylim([40 80])
График немного грубоват (пока не могу опубликовать изображение, так как я новичок), потому что у нас всего несколько точек данных. Мы можем улучшить визуализацию, удалив пустые корзины, установив для них значение NaN. Кроме того, подход биннинга скрывает любые изменения в данных Z (мощности), поэтому мы также можем наложить облако точек ординала, используя plot3, без рисования соединительных линий. (Опять нет изображения б / к я новенький)
Дополнительный код для финального участка:
%% Расширенный участок
% Remove zeros (useful with enough valid data)
%Pest(Pest == 0) = NaN;
% First the original points
figure(2)
plot3(Tavg, Havg, Pavg, '.')
hold on
% And now our estimate
% The use of 'FaceColor' 'Interp' uses colors that "bleed" down the face
% rather than only coloring the faces away from the origin
surfc(Tval, Hval, Pest, 'FaceColor', 'Interp')
% Make this plot semi-transparent to see the original dots anb back side
alpha(0.5)
xlabel('Temperature')
ylabel('Humidity')
zlabel('Power')
grid on
title('Nicer binned average')
xlim([14 24])
ylim([40 80])