我在Matlab中有数据,我想为其创建一个热图样式图。通常的方法是使用imagesc
,也可以使用自定义颜色映射。(例如,请参阅对此问题的公认答案:MATLAB heat map。)但是,如果数据包含NaNs,则不一定会执行我想要的操作。MathWorks Documentation声称该行为对于NaN是未定义的。在实践中,结果似乎是为颜色分配了颜色映射表中的最小值。
在NaN标记没有值可用的情况下,这可能会产生误导。最好将此显示设置为颜色映射表中的其他颜色。该怎么做呢?
我注意到另一个问题(Assign different color to NaN values in Matlab images),它有点类似。在我看来,这不是重复的,因为它通过一个不同的函数调用创建图像,可能具有自己的底层结构。
发布于 2017-02-16 03:13:55
在MathWorks网站上运行了许多声称这是不可能的答案后,我找到了以下解决方案:您可以随心所欲地更改每个色块的透明度。默认情况下,所有内容都是不透明的,但我将数据为NaN的值设置为透明。这与显式地将补丁的颜色设置为颜色映射表之外的颜色不同,但如果图中没有任何其他可能“显示”并导致混淆的内容,则此方法非常有效。在这种情况下,与NaN对应的区域显示为曲面上的“孔”,显示轴的背景颜色。数据在变量data
中,轴值(分别)在x
和y
中给定
h = imagesc(x, y, data);
h.AlphaData = ones(size(h.CData));
h.AlphaData(isnan(h.CData)) = 0;
第一行创建图像,第二行将所有面片设置为不透明,最后一行将对应于NaN的面片设置为透明。尽管复制了默认行为,但第二行似乎是必需的,因为AlphaData
的默认值是标量1,而我们需要它是1的矩阵才能使第三行工作。
https://stackoverflow.com/questions/42258159
复制相似问题