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