2017-02-15 58 views
0

我有Matlab的数据,我想创建一个热图样式图。通常的做法是使用imagesc以及可能的自定义颜色地图。 (例如,请参阅此问题上接受的答案:MATLAB heat map。)但是,如果数据包含NaN,则这不一定符合我的要求。 MathWorks Documentation声称NaN的行为未定义。在实践中,结果似乎是颜色被分配了颜色映射中最小值的颜色。如何让NaN在Matlab中用imagsc显示不同的颜色?

在NaN标记没有可用值的情况下,这可能会引起误解。将该节目作为颜色映射中的颜色以外的其他节目将是更可取的。怎么做?

我注意到这个其他问题(Assign different color to NaN values in Matlab images),这有点类似。然而在我看来,这不是重复的,因为它通过不同的函数调用来创建图像,可能具有它自己的基础结构。

+0

还与[this](http://stackoverflow.com/questions/38851267/matlab-imshow-omit-nan/38851344#38851344) – Suever

回答

0

在MathWorks网站上运行很多答案后,我发现以下解决方案:您可以根据需要更改每个色块的透明度。默认情况下,将所有内容都设置为不透明,但我将数据为NaN的值设置为透明。这与将补丁的颜色明确地设置为颜色映射外的某些东西不同,但如果图中没有任何其他内容可能会“透视”并导致混淆,那么它很有用。在这种情况下,与NaN相对应的区域看起来像是表面上的“洞”,表示轴的背景颜色。随着xy给出(各自)的可变data和轴线值的数据:

h = imagesc(x, y, data); 
h.AlphaData = ones(size(h.CData)); 
h.AlphaData(isnan(h.CData)) = 0; 

第一行创建的图像,第二行设置所有的补丁是不透明的,并且最后将对应于NaN的补丁透明。尽管复制了默认行为,但第二行似乎是必需的,因为AlphaData的默认值是标量1,而我们需要它是第三行的矩阵。

相关问题