matlab怎样将数据变化和颜色变化对应,求助各位大神

clear;clc;
A=unifrnd(-.5,.5,10,10);
B=100*[A,0*A(:,1);0*A(1,:),0]
[m,n]=meshgrid(1:11);
surf(m,n,0*m,B,'linestyle',':');
%%%%%%%%%自定义颜色%%%%%%%%%%%
map=ones(199,3);
c=linspace(0,1)';
map(1:100,[2,3])=[c,c];
map(199:-1:100,[1,3])=[c,c];
colormap(map);
colorbar([-50,50]);
%%%%%%%%%%%%%%%%%%%%%%%%%%
view(2);axis ij
axis([1,11,1,11])
set(gca,'xtick',1.5:10.5,'xticklabel',char('A'+(0:9)'),'ytick',1.5:10.5,'yticklabel',{-39.3,-29.6,-17.7,-10.5,-2.4,8.7,14.9,27,37,44})
[m,n]=meshgrid(1.5:10.5);
%%%%%%%%显示百分比%%%%%%%%%%%%
text(m(:),n(:),cellfun(@(x)[num2str(x),'%'],num2cell(round(A(:)*100)),'UniformOutput',false),'HorizontalAlignment','center','color','b')
这是有位大神编的代码。出来的图如下

我现在想请教各位,哪个命令是将数据和颜色对应?另外这个命令在matlab7中可以出来如图,但在2012b中出来是三维的,而且不能显示百分比和colorbar。求教各位了。我现在想了解他的命令后把自己的矩阵画成这样。
另外还有surf这个函数和pcolor函数画这个都能画出来么?有什么不同可以介绍一下吗?

1、启动Matlab,在home菜单下打开“preference”首选项界面,该界面可以对常见的默认设置进行修改。

2、选择“Fonts->Custom”自定义界面,该界面可以自定义命令窗口、命令历史窗口、编辑窗口等的字体格式和大小。

3、在如图所示的位置,选择自己感兴趣的窗口,然后选择“Custom”选项,对字体格式和大小进行更改。

4、选择“Preference->Colors”选项,注意不要选择Colors选项下面的“Programming Tools”,该项是对编程过程中产生的变量、程序名的颜色进行设置。

5、在右侧对话框中,勾掉“Use system colors”,然后分别针对字体颜色、六个语法颜色(keywords, comments,strings等)、和命令窗口颜色进行设置。

6、最后点击“OK”完成设置。该设置始终有效,不会随matlab的关闭或重启改变。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-03
surf(x,y,z,C)
画出来就是三维的曲面,x,y,z是坐标数据,C是颜色数据

函数会根据x,y,z坐标的数据,画出曲面
而根据C数据在对应的位置显示对应的颜色
当你传递给函数的参数C是一个大小和x,y,z一样的矩阵时
而颜色对应采取一个简单的线性对应
colormap需要一个Nx3的矩阵
其中N行表示N种颜色,3列表示每种颜色的r,g,b分量
将C中的数据从最小到最大值,按照线性的间隔分成N类
但C的数据在第n类时,就选colormap中第n行的颜色
所以实现数据和颜色的对应非常简单
只要指定一个colormap再将数据传递给C参数就可以了

那位大神用了
surf(m,n,0*m,B,'linestyle',':');
其中想x,y就是m,n 而z=0*m都是零
所以画的图面就是z=0这个平面,而颜色数据就是B
并且他用view(2),以二维的视角去观看

所以他使用一个画3维曲面的函数surf,去实现一个画2维平面的功能

实际上要实现二维网格不同颜色显示,可以用更简单的
imagesc函数追问

您解释的非常清楚,我看懂了。看来您比大神还大神。但是我还想问,他这个代码中哪个地方是把B的数据和map这个颜色矩阵线性对应。也就是说一个B中的一个值就对应的一个[r,g,b],这个是怎么办到的?

追答

颜色的对应是有surf函数自己完成的

你只要把B矩阵作为参数传递给surf就可以了


而至于用什么颜色

就用colormap (map)指定一个颜色map

那位大神还用一些几句,自己创造了一个map,也就是红-白-绿的map

map=ones(199,3);

c=linspace(0,1)';

map(1:100,[2,3])=[c,c];

map(199:-1:100,[1,3])=[c,c];


你也可以不用自己去创造map,而用matlab自带的定义好的map


例如用黑白灰度map

colormap(gray);

用类似骨科x光图片的颜色map

colormap(bone);


而还可以指定需要分为多少种颜色

colormap(gray(100));%分100中颜色


你也可以再画完图之后,弹出图片对话框figure中

的在菜单中找到 Edit->colormap选项,就会弹出Colormap Editor 对话框,如下图

对话框会显示现在所用的colormap

你的数据最小值就会显示最左边的颜色,最大值显示最右边的颜色

中间的颜色线性分布

在对话框中Tools->Standard Colormaps中可以选择matlab定义好的map


你可以逐一试试

追问

非常感谢您的回答,嗯,我已经试出来了。效果挺好的。另外那个colorbar怎么显示出来,函数的格式是什么样子的?

追答

在代码中加一行

colorbar;

就可以了


也可以在figure的菜单中找到这个按钮点一下就可以了

本回答被提问者采纳
相似回答