《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 72553|回复: 892
收起左侧

[基础] [原创]利用MATLAB绘制矩阵色块图

    [复制链接]
发表于 2013-1-25 01:10:15 | 显示全部楼层 |阅读模式
本帖最后由 xiezhh 于 2013-1-26 17:41 编辑

R语言中有一个根据实值矩阵绘制色块图的程序(用于绘制相关系数矩阵图),可以用丰富的颜色和形状形象的展示矩阵元素值的大小。遗憾的是MATLAB中没有这样的函数,因此我就用MATLAB编写了一个matrixplot函数,下面给出示例和源码,与大家一起分享!

【例1】绘制网格线,网格中显示矩阵元素。
显示黑色文字:
  1. >> x = [1,-0.2,0.3,0.8,-0.5
  2.    -0.2,1,0.6,-0.7,0.2
  3.     0.3,0.6,1,0.5,-0.3
  4.     0.8,-0.7,0.5,1,0.7
  5.    -0.5,0.2,-0.3,0.7,1];
  6. >> XVarNames = {'xiezhh','heping','keda','tust','tianjin'};
  7. >> matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames',XVarNames);
复制代码
效果图1:
示意图1.jpg
根据矩阵元素值自动设置文字颜色:
  1. >> matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames',XVarNames,'TextColor','Auto','ColorBar','on');
复制代码
效果图2:
示意图2.jpg
【例2】绘制实值矩阵各元素对应的色块,通过不同的“参数/参数值”控制色块的形状、大小、颜色等属性。
方形色块,充满方格,灰白色字体
  1. >> matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'TextColor',[0.6,0.6,0.6],'ColorBar','on');
复制代码
效果图3:
示意图3.jpg
方形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体
  1. >> matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Auto','ColorBar','on');
复制代码
效果图4:
示意图4.jpg
椭圆形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体
  1. >> matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Auto','ColorBar','on','FigShape','e');
复制代码
效果图5:
示意图5.jpg
圆形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体,上三角形式显示
  1. >> matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Auto','ColorBar','on','FigShape','c','FigStyle','Triu');
复制代码
效果图6:
示意图6.jpg
六边形色块,根据矩阵元素值自动确定色块的大小和颜色,显示字体,下三角形式显示
  1. >> matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','on','FigSize','Auto','ColorBar','on','FigShape','h','FigStyle','Tril');
复制代码
效果图7:
示意图7.jpg
表盘形色块,根据矩阵元素值自动确定色块的颜色,不显示字体
  1. >> matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','off','FigSize','Full','ColorBar','on','FigShape','d');
复制代码
效果图8:
示意图8.jpg

【例3】读取真彩图片,绘制伪红外图。
  1. >> I = double(imread('kids.tif'));
  2. >> matrixplot(I,'DisplayOpt','off','colorbar','on','grid','off');
复制代码
效果图9:
示意图9.jpg

最后贴上matrixplot函数的源码,源码中有详细的调用格式及参数说明,感兴趣的版友可以通过设置不同参数,做出更为精彩的图形,希望大家喜欢!
matrixplot.m (16.07 KB, 下载次数: 1408)

评分

参与人数 5威望 +3 贝壳 +14 贡献 +21 收起 理由
emma20121221 + 1
S_toad + 1 + 1 + 3
SimulinkSky + 3 感谢您分享自己珍贵的资料
machreehappy + 2 + 5
rocwoods + 2 感谢您分享自己珍贵的资料

查看全部评分

发表于 2016-8-21 19:57:47 | 显示全部楼层
按照楼主的代码:
>> x = [1,-0.2,0.3,0.8,-0.5
   -0.2,1,0.6,-0.7,0.2
    0.3,0.6,1,0.5,-0.3
    0.8,-0.7,0.5,1,0.7
   -0.5,0.2,-0.3,0.7,1];
>> XVarNames = {'xiezhh','heping','keda','tust','tianjin'};
>> matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames',XVarNames);
不能运行,显示:
Undefined function or variable 'matrixplot'.
请赐教。
我用的是:r2015a版本
回复 支持 1 反对 0

使用道具 举报

发表于 2017-10-22 11:44:57 | 显示全部楼层
请教问题:
>> x = [1,-0.2,0.3,0.8,-0.5
   -0.2,1,0.6,-0.7,0.2
    0.3,0.6,1,0.5,-0.3
    0.8,-0.7,0.5,1,0.7
   -0.5,0.2,-0.3,0.7,1];
XVarNames = {'xiezhh','heping','keda','tust','tianjin'};
matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames',XVarNames)
error:Undefined function or method 'matrixplot' for input arguments of type 'double'.
谁可以帮助我啊,我特别急着需要用 再次感谢你们
回复 支持 反对

使用道具 举报

发表于 2013-1-25 01:38:22 | 显示全部楼层
好。顶谢老师。
发表于 2013-1-25 09:30:54 | 显示全部楼层
好东西啊 藏了
 楼主| 发表于 2013-1-25 11:44:27 | 显示全部楼层
又更新了一下程序,把surf绘图改为patch绘图,更新后的程序运行效率更高。

点评

谢老师太认真了,值得学习  发表于 2013-1-25 18:03
发表于 2013-1-25 11:49:39 | 显示全部楼层
很好 很强大
发表于 2013-1-25 14:30:41 | 显示全部楼层
发表于 2013-1-25 14:31:52 | 显示全部楼层
最后贴上matrixplot函数的源码,源码中有详细的调用格式及参数说明,感兴趣的版友可以通过设置不同参数,做出更为精彩的图形,希望大家喜欢!
发表于 2013-1-25 14:56:02 | 显示全部楼层
 楼主| 发表于 2013-1-25 15:55:08 | 显示全部楼层
几经修改,总算定稿了。
发表于 2013-1-25 16:11:36 | 显示全部楼层
谢老师强大!顶!
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-8-6 06:41 , Processed in 0.062038 second(s), 16 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表