如何为一维创建平滑的热图?

时间:2019-07-12 23:45:29

标签: matlab heatmap colorbar colormap

我具有一维中8个节点点的变量Y的温度值。现在,当我尝试绘制图时,将获得温度梯度作为单独的框,如下所示。我不想要这个。实现此结果的代码如下所示(热图1D)

heatmap 1D

Y =
1.0e + 03 *
4.1962
3.5087
2.8783
2.3026
1.7775
1.2967
0.8516
0.4318

 figure (1)
 imagesc (Y)
 axis equal
 axis off
 colorbar;

heatmap 1D (smooth)

我需要获得一个平滑的图像,如第二幅图所示(热图1D平滑),其中温度梯度之间的过渡是平滑的。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

使用interpolation,我们可以实现这一目标。最初,我们有8个值。我们想对它们进行插值,因此我们有100个值,而不是8个。如果您对插值不熟悉,则初始值仍会存在,并且我们之间添加的所有值都将作为我们之间的梯度值已经有。

在我们的示例中,我们仅在1维上进行插值,并且可以使用interp1

Y = 1000 * [4.1962 3.5087 2.8783 2.3026 1.7775 1.2967 0.8516 0.4318]';
Y = interp1(Y, linspace(1,8))';

figure (2)
imagesc (Y)
axis ([-3 5 0 100])
axis off
colorbar

interp1的第二个参数是linspace(1,8)linspace的默认行为是创建从第一个参数开始到最后一个参数结束的100个均匀间隔的值。这些是我们要插值的x值。在这种情况下,我们实际上没有任何x值,但是由于interp1将所有Y值都视为x的函数,因此假设Y的索引为如果我们不作任何进一步说明,则为x值。

最后,我们将轴更改为与您在问题中发布的图像更相似,并获得以下信息。

之前...
enter image description here

之后...
enter image description here