在 Matlab/Octave 中创建颜色图/热图

Creating a color map / heatmap in Matlab / Octave

我正在使用类似于 Matlab 的 Octave 3.8.1,我正在尝试创建一个颜色图/热图,看起来像这样

我有一个数组 a1,其中第 1 列是 x,第 2 列是 y,第 3 列是强度。我知道我可以使用 plot(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

请注意,这只是样本数据。

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]

为了绘制热图,您需要将数据强度化为图像(即二维矩阵)。然后你可以使用 imagescimshow.

绘制它

为了做到这一点,您需要首先获得一个 x 值的二维矩阵 (X),以及一个相应的 y 值的二维矩阵 (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 标准化为从 01 的范围(或者对于此数据,使最低非零值等于零)提高对比度:

m = min(Z(Z~=0));
M = max(Z(Z~=0));
imshow((Z-m)/(M-m));