Создание цветовой карты / карты тепла в Matlab / Octave
Я использую Octave 3.8.1, которая похожа на Matlab, и я пытаюсь создать цветную карту / карту тепла, чтобы выглядеть примерно так
У меня есть массив a1, где 1-й столбец х, 2-й столбец у и 3-й столбец интенсивность. Я знаю, что могу построить двухмерный график, используя график (x,y), но как мне добавить / показать интенсивность (3-й столбец) на графике.
a1=
[225.512 2.64537 0.00201692
225.512 2.64537 0.00201692
226.94 1.59575 0.00225557
226.94 1.59575 0.00225557
227.31 1.70513 0.002282
227.31 1.70513 0.002282
227.729 5.34308 0.00205535
227.729 5.34308 0.00205535
227.975 5.12741 0.001822
227.975 5.12741 0.001822]
Полный набор данных находится здесь https://www.dropbox.com/s/mmhpbelnjoondho/full.csv
Обратите внимание, что это только примерные данные.
1 ответ
a1=
[225.512 2.64537 0.00201692
225.512 2.64537 0.00201692
226.94 1.59575 0.00225557
226.94 1.59575 0.00225557
227.31 1.70513 0.002282
227.31 1.70513 0.002282
227.729 5.34308 0.00205535
227.729 5.34308 0.00205535
227.975 5.12741 0.001822
227.975 5.12741 0.001822]
Для того, чтобы построить вашу тепловую карту, вам нужно обработать данные интенсивности в виде изображения (т.е. 2D-матрицы). Тогда вы можете просто построить его, используя imagesc
или же imshow
,
Для этого вам нужно сначала получить 2D матрицу значений x (X
) и соответствующая двумерная матрица значений у (Y
) так что вы можете интерполировать сетку значений Z (Z
).
x = a1(:,1);
y = a1(:,2)
z = a1(:,3)
n = 256;
[X, Y] = meshgrid(linspace(min(x),max(x),n), linspace(min(y),max(y),n));
Z = griddata(x,y,z,X,Y);
%// Remove the NaNs for imshow:
Z(isnan(Z)) = 0;
imshow(Z)
вы можете захотеть нормализовать Z
варьироваться от 0
(или в случае этих данных сделать минимальное ненулевое значение равным нулю) 1
улучшить ограничения:
m = min(Z(Z~=0));
M = max(Z(Z~=0));
imshow((Z-m)/(M-m));