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

在Matlab/Octave中创建颜色图/热图,matlab,octave,heatmap,color-mapping,colormap,Matlab,Octave,Heatmap,Color Mapping,Colormap,我正在使用Octave 3.8.1,它类似于Matlab,我正在尝试创建一个颜色图/热图,看起来像这样 我有一个数组a1,其中第一列是x,第二列是y,第三列是强度。我知道我可以使用plot(x,y)绘制2d绘图,但如何在绘图中添加/显示强度(第三列) 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

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

我有一个数组a1,其中第一列是x,第二列是y,第三列是强度。我知道我可以使用plot(x,y)绘制2d绘图,但如何在绘图中添加/显示强度(第三列)

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]
完整数据集位于此处

请注意,这只是示例数据

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
来打印它

为了做到这一点,您需要首先获得x值的2D矩阵(
x
),以及相应的y值的2D矩阵(
y
),以便可以插值z值的网格(
z

您可能希望将
Z
标准化为
0
(或者对于此数据,使最低非零值等于零)到
1
,以提高对比度:

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

您可以尝试使用
shading interp
使用
pcolor
。以下是MATLAB/Octave中的大多数3D绘图工具要求强度(
Z
)是一个矩阵,对应于由
x
y
数据生成的网格。在您的示例中,没有足够的强度数据生成与您的问题类似的绘图。正如@IKavanagh所说,您的数据没有包含足够的信息来绘制曲面,如图所示。你能展示一个MVCE吗?@Ander Biguri什么是MVCE?什么是
a1
有重复行?这是您的完整数据集吗?使用
imagesc
获得更像OP要求的结果。
m = min(Z(Z~=0));
M = max(Z(Z~=0));
imshow((Z-m)/(M-m));