请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7334|回复: 5

[秀图] matlab设置不等间距colorbar

[复制链接]

新浪微博达人勋

发表于 2019-1-22 22:18:08 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 细嗅猛虎 于 2019-1-22 22:47 编辑

其实二爷已经发过相关的了,但奈何呢直接搜索是搜不到这个的,所以很多人还是会问
不过我没有看过二爷的……所以用自己微薄的代码造诣粗糙地做了一个新手向“教程”
第一次发帖,排版可能不咋滴,凑合着看吧

untitled.jpg
先放图,就是随手用一个peaks矩阵随手设置了一些间隔,然后随手画了一下,随手发个帖。 - -大佬们不要揪小辫子,求放过。
随手贴段代码
  1. clc;clear all;
  2. aaa = peaks(300);
  3. X=[-6 -5.5 -4.5 -3 -2.5 -2 0 1.5 3 5 7.5 8];
  4. L = length(X);
  5. Y = 1:length(X);% 创建一个和X一样场的坐标用作插值和colorbar的tick
  6. pp = spline(X,Y);% 插值
  7. V = ppval(pp,aaa);% 将原始的aaa转换成与Y对应的整数
  8. % >>>>>figure<<<<<<<<<
  9. pcolor(double(V));
  10. shading interp;
  11. colormap(jet);% CM可以为任意N*3的矩阵,3为
  12. caxis([1,L]);% L可以修改
  13. ht=colorbar('YTick',Y,'YTicklabel',X);% 配合着上一行的L的修改,可以修改对应的Ytick和label
  14. set(get(ht,'ylabel'),'String','大懒熊','Rotation',-90);
复制代码


说明一下,aaa这个矩阵最大约8.1,最小约-6.5.根据自己的需求更换X矩阵和Y矩阵就好啦。如果你要使用横向的colorbar的话,只需要把colorbar括号里对应的参数改为'Xtick'和'Xticklabel'就好了
大体思路就是把原来的值不等间隔地“换成”对应的一个1到十几的数(这个看个人爱好,可以换成别的),然后再等间隔分隔colorbar的坐标,再通过colorbar的函数设置(或者set,get)“还原”数据


                               
登录/注册后可看大图

  1. cn = 64;
  2. r = rand(cn,1).^2;
  3. g = 1-rand(cn,1).^2;
  4. b = (0:1/cn:1-1/cn)';
  5. CM = [r,g,b];
  6. colormap(CM);
复制代码

untitled.jpg
好吧丑的很,吓到了不管我事- - 不过这个随机的,不怪我。其实就是用一个N*3的矩阵去涂这个图,每一行是一个范围的值的对应颜色(所以N越大colorbar越连续,越小越断续)每一列是对应的RGB颜色通道,你可以自己去一个个颜色试,也可以写函数定义RGB的变化。如果RGB变化速度相同就是个灰度图。matlab也有自带的colormap矩阵,网上也有很多配的很好看的例子,这个就不多说了。
有什么问题可以加二爷的群,可能不怎么常看论坛,我QQ(写好来历否则一律拒,算了也没人看):


密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-22 22:20:48 | 显示全部楼层
好吧 代码乱码了贴这里吧
  1. clc;clear all;
  2. aaa = peaks(300);
  3. X=[-6 -5.5 -4.5 -3 -2.5 -2 0 1.5 3 5 7.5 8];
  4. L = length(X);
  5. Y = 1:length(X);% 创建一个和X一样场的坐标用作插值和colorbar的tick
  6. pp = spline(X,Y);% 插值
  7. V = ppval(pp,aaa);% 将原始的aaa转换成与Y对应的整数
  8. % >>>>>figure<<<<<<<<<
  9. pcolor(double(V));
  10. shading interp;
  11. colormap(jet);% CM可以为任意N*3的矩阵,3为
  12. caxis([1,L]);% L可以修改
  13. ht=colorbar('YTick',Y,'YTicklabel',X);% 配合着上一行的L的修改,可以修改对应的Ytick和label
  14. set(get(ht,'ylabel'),'String','大懒熊','Rotation',-90);

复制代码
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-22 22:23:21 | 显示全部楼层
  1. cn = 64;
  2. r = rand(cn,1).^2;
  3. g = 1-rand(cn,1).^2;
  4. b = (0:1/cn:1-1/cn)';
  5. CM = [r,g,b];
  6. colormap(CM);
复制代码
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-22 22:33:26 | 显示全部楼层
本帖最后由 细嗅猛虎 于 2019-1-22 22:49 编辑

抢救回来了 - -原文也不乱码了,可以删楼吗……
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-13 15:05:41 | 显示全部楼层
请问楼主:colorbar设置不等间距是只能在数据最大值和最小值的范围内吗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-3-21 17:29:05 | 显示全部楼层
zaoxianshen 发表于 2019-3-13 15:05
请问楼主:colorbar设置不等间距是只能在数据最大值和最小值的范围内吗

不是吧 但是设置超过最大最小值的话会让图中能体现的信息更模糊吧
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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