Matlab Создание 2-мерного цветового графика и интерполяция трехмерного массива - PullRequest
1 голос
/ 08 февраля 2012

У меня есть матрица, в которой хранятся значения x, y и z следующим образом:

{x1, y1, z1},
{x2, y2, z2},
{x3, y3, z3},
etc...

Мне нужно интерполировать данные и построить график на двухмерном графике, где цвет представляет значение z.( пример )

Есть идеи?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

В дополнение к @Alexandrew answer вы можете использовать более новый и более быстрый TriScatteredInterp класс вместо GRIDDATA.В качестве примера вы можете использовать 2D IMAGESC вместо 3D MESH.

%# insert the code from @Alexandrew answer to generate meshgrid
[XI, YI] = meshgrid(xi, yi);
TSI = TriScatteredInterp(x,y,z);
ZI = TSI(XI,YI);
imagesc(ZI)
colorbar

Если ваша входная матрица является массивом ячеек, вы можете преобразовать ее в числовую матрицу с помощью a = cell2mat(a);

2 голосов
/ 08 февраля 2012

Что-то вроде griddata может помочь вам интерполировать:

x = vector(:,1);
y = vector(:,2);
z = vector(:,3);

% Settings
xres = 800; % Resolution, the higher, the smoother
yres = 800;         
cm = 'default'; % Colormap

% Axes Limits
xmin = min(x); 
ymin = min(y);
xmax = max(x); 
ymax = max(y); 
xi = linspace(xmin, xmax, xres);
yi = linspace(ymin, ymax, yres);

% Figure
myfig = figure('Position', [200 200 800 600]);

rotate3d off
[XI, YI] = meshgrid(xi, yi);
ZI = griddata(x, y, z, XI, YI, 'cubic');
mesh(XI,YI,ZI);

, чем вам просто нужно изменить вид, чтобы отображать только определенное plane для фиксированного значения z

...