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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的关闭或重启改变。

参考技术A 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的菜单中找到这个按钮点一下就可以了

本回答被提问者采纳

求助QT高手,怎么将传感器收集到的数据显示在qt界面上,还要实现数据制图(温湿度的变化图)

参考技术A 直接画,太麻烦!
你直接用第三方库,qwt 吧,简单,好用!追问

qwt跟qt一样吗?不知道怎么使用啊
能说的详细点吗?
马上就得交项目了

参考技术B 是的 买个记录仪吧 软件使用很方便 有曲线图还可以导出EXCEL表格 参考技术C 你用一个记录仪不就行了 有软件 还有狗 很方便 这个也不贵的

以上是关于matlab怎样将数据变化和颜色变化对应,求助各位大神的主要内容,如果未能解决你的问题,请参考以下文章

latex紧急求助,如何将目录的颜色变为黑色

怎样才能使excel里面字体颜色随系统时间的变而变化

MATLAB实现矩阵里数值的大小对应颜色的深浅

matlab怎样进行频谱分析

求助:matlab怎样把矩阵显示成黑白图像

Excel中如何让进度中的时间随着开始时间和结束时间的变化而发生颜色变化呢?请各位大神不吝赐教,重谢!