Создание цветовой карты / карты тепла в 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));
Другие вопросы по тегам