赞
踩
colorbar想改成指数分布的形式。
其实很简单,用以下的代码试一试一般就能实现。
set(gca,'ColorScale','log')
但好巧不巧的是,数据中有正也有负。
一旦在负数里面用了这个,数据分布就完全不对!
因此,我们要考虑如何在正数和负数都存在的情况下,做一个指数分布的colorbar!
经过博主百般搜索,最终敲定了一个方法,就是自己把数据先log一下。
那么问题来了,负数如何log呢?
如果把负数当成正数一样处理,那么正数又该如何log呢?
而且,靠近0的数据,是无穷大和无穷小,是无法处理的范围!
终于,在绞尽脑汁之后!
发现可以采用如下的方式:
1.查看和限定数据范围。我的数据是分布在[-1,1]之间,我想要查看的结果,只要数据在[-1,-1E-6]以及[1E-6,1]这个范围,从而避开了无限这个问题!
2.把负数和正数当做是一个范围,这个范围整体向正轴移动,也就是说,大家一起放大!这个放大系数根据你的数据特性来!
尽力了的示意图
3.放大后,你的数据就都是正数了!就用传统的方法搞一搞,改一下ticks就ok了!
所以我分享的代码如下:
- function [logdata] =neglog(data)
- fudge_zero = 1E-7;
-
- %正数,放大系数为1E14
- data(data>fudge_zero)=log10(data(data>fudge_zero)*1E14);
-
- %中间数值0的移动
- data(data<=fudge_zero & data>=-fudge_zero) = 7;
-
- %负数
- data(data<-fudge_zero)=sign(data(data<-fudge_zero)).*log10(abs(data(data<-fudge_zero)));
-
-
- logdata = data;
- end
今天就到这!纯记录!
共勉!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。