我在Matlab中有数据,我想为其创建一个热图样式图。通常的方法是使用imagesc
和可能的自定义颜色映射。 (例如,请参阅此问题的已接受答案:MATLAB heat map。)但是,如果数据包含NaN,则不一定按照我的意愿行事。 MathWorks Documentation声称NaN的行为未定义。在实践中,结果似乎是颜色被指定为颜色映射中最小值的颜色。
如果NaN标记没有可用值,则可能会产生误导。最好将此节目作为颜色映射中的颜色以外的其他内容。怎么做?
我注意到另一个问题(Assign different color to NaN values in Matlab images),这有点类似。然而,在我看来,它并不重复,因为它通过不同的函数调用创建了图像,可能还有自己的底层结构。
答案 0 :(得分:0)
在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,而我们需要它是一个矩阵,以便第三行工作。