- 积分
- 122
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-4-8
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 bene1989 于 2017-3-15 16:45 编辑
自己曾因为如何在Matlab中设置nonlinear类型的colorbar困扰了近一个星期的时间,也在网上找了几个方法,但发现这些方法都有这样那样的问题,下面是本人曾试过的两种方法:
方法一:更改colormap (https://cn.mathworks.com/matlabcentral/newsreader/view_thread/237071)。
使用该方法所得的图如上所示,虽然能够准确表示不同区间数据的颜色,但是colorbar的间隔并不均匀,并且在数据间隔较大时,产生的colormap数量太多,故该方法不具有普适性。
方法二: 只更改colorbar的Ticks (http://bbs.06climate.com/forum.p ... tid=49521&typeid=12)。
选用网友提供的没有使用creatColor.m函数的方法,即在colorbar根据数据levels的大小单纯将colorbar的Ticks设置为等差数列,然后将[size=12.1387px]TickLabels设置为要表示的数据数据,所得结果如下图所示
所得结果是错误的,因为TickLabels所标注的数值不等于色标所表示的真实值(或者说TickLabels与其要表示的真实值间没有对应关系)。
自己的方法:根据选择的不等距数据区间更改所用的绘制数据,然后设置colorbar的TickLabels。
绘图要求:根据数据draw_data绘制其在中国区域内的空间图。按照dlevels=[0,50,200,500,800,1000,1500,2000,3000,4000]的不等距数据间隔绘制等距的colorbar,以分别准确表示0-50,50-200, ... , 3000-4000区间内的数据颜色。
核心思路:既然Maltab中的colorbar只能以等差数列绘制等距色标,那就将draw_data根据dlevels的数据范围设置为等差数据,毕竟我们只要颜色的空间图,与真实数据对应就好,核心代码如下:
dlevels = [0,50,200,500,800,1000,1500,2000,3000,4000] ;
for k = 1 : length(dlevels) - 1
draw_data(find(draw_data>dlevels(k) & draw_data<=dlevels(k+1))) = k ;
end
draw_data(find(draw_data==dlevels(1))) = 1 ;
cmap = colormap(jet(length(dlevels) - 1)) ;
colormap(cmap) ;
caxis([0 length(dlevels)-1]) ;
cbar = colorbar ;
set(cbar,'Ticks',[0,1,2,3,4,5,6,7,8,9],'TickLabels',dlevels) ;
所得结果如下:
为保证colorbar的刻度线与不同颜色的分界线对应,要注意colormap设置的颜色数量,其它任意的不等距数据绘制等距colorbar的方法大家可以举一反三。
|
评分
-
查看全部评分
|