pcolor .vs. imagesc
1. 关于pcolor
通常,我们需要把Matlab的计算结果(如二维的矩阵)以图形的形式呈现出来,在使用matlab画图函数时,通常会用到 pcolor 函数,即Pseudocolor (checkerboard) plot棋盘图
- 举例
>> data = magic(4)
data =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> pcolor(data);
>> colorbar
- 结果为
【注意】
- 画图的时候,矩阵是上下颠倒的,最大的16在最下面;
- 矩阵中图块的颜色对应的是该块左下角的点,如此以来,矩阵中的最后一行和最后一列都相对于没有画
- 颜色块的中心点不是矩阵的行序号或者列序号;可以通过pcolor(x,y, data)错位的方式进行对应,可以参考博文
【当然】
- 如果我们需要画的矩阵是规则的(即每个行列位置都不是NaN),那这样画其实是有问题的!因为总会有一行和一列是没有被颜色块所表现;
- 如果我是要画某个地区,其形状通常是不规则的(地区的周围有很多NaN值),这样情况下,其实用pcolor函数就没有太多影响;
2. 关于imagesc
【目的】
我们画图的目的其实更多是想直接以色块的形式呈现矩阵的数值大小。因此,偶然发现,其实正确的打开方式,应该是 imagesc函数
- 举例
>> data = magic(4)
data =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> imagesc(data);
>> colorbar
- 结果为
- 图块顺序和矩阵位置完全一致
- 不存在缺行少列的情况
- 行序号和列序号对应的就是色块中心点
如果数据中间有NaN的情况,在画图时可以将其隐去
data =
16 2 3 13
5 NaN 10 8
9 7 6 NaN
4 14 15 1
h1=imagesc(data);
set(h1,'alphadata',~isnan(data));
结果为:
【感悟】
方法远比努力更重要,多看多听多学多试,才不会固步自封!