在 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]
为了绘制热图,您需要将数据强度化为图像(即二维矩阵)。然后你可以使用 imagesc
或 imshow
.
绘制它
为了做到这一点,您需要首先获得一个 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
标准化为从 0
到 1
的范围(或者对于此数据,使最低非零值等于零)提高对比度:
m = min(Z(Z~=0));
M = max(Z(Z~=0));
imshow((Z-m)/(M-m));
我正在使用类似于 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]
为了绘制热图,您需要将数据强度化为图像(即二维矩阵)。然后你可以使用 imagesc
或 imshow
.
为了做到这一点,您需要首先获得一个 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
标准化为从 0
到 1
的范围(或者对于此数据,使最低非零值等于零)提高对比度:
m = min(Z(Z~=0));
M = max(Z(Z~=0));
imshow((Z-m)/(M-m));