加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

matlab中pcolor命令为何只能显示(m-1)*(n-1)个格子?

(2013-05-22 21:37:14)
标签:

matlab

pcolor

it

转自:http://www.stdlogic.net/blog/?p=365

最近受启发想根据一组数据做个热区图,查了半天在MATLAB里叫做伪彩色图或者棋盘图(pseudocolor plot or checkerboard plot),画图函数是pcolor。欣喜的以为画图成功后发现少了一行一列,故详细研究了一下做个笔记。

生成一个矩阵C来试验几个例子。

C=zeros(5)
for i=1:5
for j=1:5
C(i,j)=5*i+j;
end
end

C =
             5
            10
11    12    13    14    15
16    17    18    19    20
21    22    23    24    25

先看下直接用pcolor函数画图的结果。

pcolor(C),colorbar;

http://www.stdlogic.net/blog/wp-content/uploads/2013/01/pcolor1.png

pcolor函数根据矩阵C各行各列元素的值决定单元格的颜色。矩阵C的第1行(最上面一行)对应棋盘图的最下面一行(y=1)。

但是可以看到矩阵是5×5,棋盘图是4×4,少了一行一列。

查看文档,里面写的很清楚:

“The default shading is faceted, which colors each cell with a single color. The last row and column of C are not used in this case.”

默认的shading模式为faceted,矩阵C的最后一行一列未被用到。

“With shading interp, each cell is colored by bilinear interpolation of the colors at its four vertices, using all elements of C.”

如果改变shading模式为interp,可以使用到C中的所有元素,但不再是一格一个颜色,C的值将被赋予每个网格节点,每个格子中的颜色为格子四个顶点的插值。

hold on;shading interp;

http://www.stdlogic.net/blog/wp-content/uploads/2013/01/pcolor2.png

解决棋盘图少一行一列问题的办法就是给矩阵C的最后增加一行一列。

C=zeros(6);
for i=1:5
for j=1:5
C(i,j)=5*(i-1)+j;
end
end

C =
                0
            10     0
11    12    13    14    15     0
16    17    18    19    20     0
21    22    23    24    25     0
                0

pcolor(C),colorbar;

http://www.stdlogic.net/blog/wp-content/uploads/2013/01/pcolor3.png

这时如果改变shading,可以看到边缘颜色值掉下去。

hold on;shading interp;

http://www.stdlogic.net/blog/wp-content/uploads/2013/01/pcolor4.png

以上调用pcolor函数只给了一个参数矩阵C,还可以同时给X、Y两个坐标矩阵,其中X、Y定义的是网格的节点坐标,即每个格四个顶点的坐标(黑线位置)。X、Y、C三个矩阵的维度应该一致。

[X,Y]=meshgrid(6:-1:1,1:1:6)

X =
                1
                1
                1
                1
                1
                1

Y =
                1
                2
                3
                 4
                5
                6

pcolor(X,Y,C),colorbar;

http://www.stdlogic.net/blog/wp-content/uploads/2013/01/pcolor5.png

对比一下,可以看出色块位置的变化。

subplot(1,2,1);
pcolor(C);
title(‘pcolor(C)’);
subplot(1,2,2);
pcolor(X,Y,C);
title(‘pcolor(X,Y,C)’);

http://www.stdlogic.net/blog/wp-content/uploads/2013/01/pcolor6.png

还有一点点问题就是,棋盘图绘制的是离散格子的数据,坐标最好只以整数显示在每格的中间。为此可以做如下调整:

[X,Y]=meshgrid(0.5:1:5.5,0.5:1:5.5);

X =
0.5000    1.5000    2.5000    3.5000    4.5000    5.5000
0.5000    1.5000    2.5000    3.5000    4.5000    5.5000
0.5000    1.5000    2.5000    3.5000    4.5000    5.5000
0.5000    1.5000    2.5000    3.5000    4.5000    5.5000
0.5000    1.5000    2.5000    3.5000    4.5000    5.5000
0.5000    1.5000    2.5000    3.5000    4.5000    5.5000

Y =
0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
1.5000    1.5000    1.5000    1.5000    1.5000    1.5000
2.5000    2.5000    2.5000    2.5000    2.5000    2.5000
3.5000    3.5000    3.5000    3.5000    3.5000    3.5000
4.5000    4.5000    4.5000    4.5000    4.5000    4.5000
5.5000    5.5000    5.5000    5.5000    5.5000    5.5000

pcolor(X,Y,C);colorbar;

set(gca,’XTick’,[1:1:5]);  //X轴显示整数坐标

set(gca,’YTick’,[1:1:5]);

http://www.stdlogic.net/blog/wp-content/uploads/2013/01/pcolor7.png

格子不多的话其实更简单点直接把坐标轴隐藏好了~

axis off;

http://www.stdlogic.net/blog/wp-content/uploads/2013/01/pcolor8.png

–END–

关于如何修改pcolor图中colorbar的范围:见链接:http://blog.sina.com.cn/s/blog_700aa8830101g75b.html

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有