当前位置:   article > 正文

如何用matlab做一个指数分布的colorbar_matlab指数分布

matlab指数分布

colorbar想改成指数分布的形式。

其实很简单,用以下的代码试一试一般就能实现。

set(gca,'ColorScale','log')

但好巧不巧的是,数据中有正也有负。

一旦在负数里面用了这个,数据分布就完全不对!

因此,我们要考虑如何在正数和负数都存在的情况下,做一个指数分布的colorbar!

经过博主百般搜索,最终敲定了一个方法,就是自己把数据先log一下。

那么问题来了,负数如何log呢?

如果把负数当成正数一样处理,那么正数又该如何log呢?

而且,靠近0的数据,是无穷大和无穷小,是无法处理的范围!

终于,在绞尽脑汁之后!

发现可以采用如下的方式:

1.查看和限定数据范围。我的数据是分布在[-1,1]之间,我想要查看的结果,只要数据在[-1,-1E-6]以及[1E-6,1]这个范围,从而避开了无限这个问题!

2.把负数和正数当做是一个范围,这个范围整体向正轴移动,也就是说,大家一起放大!这个放大系数根据你的数据特性来!

尽力了的示意图 

3.放大后,你的数据就都是正数了!就用传统的方法搞一搞,改一下ticks就ok了!

所以我分享的代码如下:

  1. function [logdata] =neglog(data)
  2. fudge_zero = 1E-7;
  3. %正数,放大系数为1E14
  4. data(data>fudge_zero)=log10(data(data>fudge_zero)*1E14);
  5. %中间数值0的移动
  6. data(data<=fudge_zero & data>=-fudge_zero) = 7;
  7. %负数
  8. data(data<-fudge_zero)=sign(data(data<-fudge_zero)).*log10(abs(data(data<-fudge_zero)));
  9. logdata = data;
  10. end

今天就到这!纯记录!

共勉!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/593741
推荐阅读
相关标签
  

闽ICP备14008679号