Python绘图库Matplotlib,如何实现colormap数据有符号对数转换?

上篇文章中我们介绍了如何实现colormap数据对数转换,许多小伙伴都赶忙收藏,但是仍有部分同学不明白到底什么时候使用对数转换,下面我们就举个小例子说明一下。
假如我们有一组数据,其中90个在[0,0.0001]区间内,10个在[0.0001,1]区间内,最大值为1,最小值为0,如果采用线性方式转换成,即使有10000种色彩用于映射,那90个在[0,0.0001]区间内的数也都将转换成转换成一种颜色,而用对数转换就可以将这90个数转换成多种颜色。
虽然对数转换可以轻松的帮我们解决数据比例关系较大的问题,但其仍有一定的限制。我们都知道,对数函数的定义域为(0, +∞),这就意味着,当我们的资料有负数是就不能直接使用对数转换,此时,我们的主角有符号对数转换就派上用场了。
有符号对数转换
colors.symlognorm(linthresh, linscale=1.0, vmin=none, vmax=none, clip=false)
该方法与对数转换相比多了linthresh和linscale两个参数,其中linthresh参数用于设置一个区间[-linthresh,linthresh],在该区间内仍的数据转换以线性方式进行;linscale用于设置线性转换区与对数转换区的比值。
下面我们以一组标准正态分布的随机数为例,看一下线性转换和有符号对数转换的区别。
生成随机数
频率分布图
线性转换
对数转换
linthresh= 0.5, linscale=1.0
linthresh= 0.1, linscale=1.0
linthresh= 0.1, linscale=2.0