Matplotlib的symlog(a.k.a。对称日志)比例的起源是什么?

时间:2016-10-11 22:59:10

标签: python matplotlib plot scale logarithm

这不是一个编程问题。而是一个历史性的...

我想知道Matplotlib的symlog 或“对称日志”比例:

  • 是Matplotlib的发明吗?
  • 有没有人在另一个绘图工具中看到过类似的功能? 数学教科书? 别处?

为了完整性,并且文档有点偏短:

实质上, symlog 给出一个线性比例低于某个阈值和上面的对数比例。这允许绘制大范围的数字(如对数刻度),包括负数和零(这对于传统的对数刻度是不可能的)。

有一些示例herehere

正如@Paul所建议的那样,我继续向Matplotlib实施original author询问。他“没有发明这个概念”,但“相信它是在用户请求上实现的”。但是,他在Matplotlib邮件列表中找不到引用。

有人能指出这样的参考吗?这可能非常有见地。

3 个答案:

答案 0 :(得分:2)

浏览网络时,我发现this MatLab包实现了相同的功能。

在其描述中,报告了以下内容:

SYMLOG将修改后的对数刻度应用于指定的或当前的 在保持连续性的同时处理负值的轴 零。 在期刊的一篇文章中定义了转换 测量科学与技术(Webber,2012)

我认为假设这是该量表的原始来源是合理的。

答案 1 :(得分:1)

这更多是扩展注释。要在所有实数上连续(或更好,更平滑)地扩展对数,自然会停在一个小的正值处,进行平移和反射。也就是说,假设1较小,则对于log(x+1)非负的函数x和对于-log(-x+1)非正数的x。我已使用演示示例图(未经symlog修改)将其与下面的linthreshy比例进行了比较。

enter image description here

虽然不完全一样,但从第一排和第二排左侧图稍微陡峭就可以看出。可以通过将对称性从对数的x=1x=-1移到更接近零的位置来进行修改,例如x=.1x=-.1。此外,区域[-linthresh, linthresh]是线性的,在右侧图中并非如此。这是一个函数,它产生matplotlib的{​​{1}}的这种近似值,以及一些可供选择的玩具。

symlog

我正在四处寻找试图使这种情况发生的方法from math import log def symmetric_logarithm(arg,base=10,shift=1): if arg >= 0: return log(arg+shift,base)-log(shift,base) else: return -log(-arg+shift,base)+log(shift,base) ,它没有plotly型刻度(issue is open

答案 2 :(得分:-1)

1)你不得不问mdboom,他似乎已经创作了相关的班级(根据git责备),这是

2)SymmetricalLogScale。

Matplotlib有一个github,并且已经受版本控制一段时间了,所以通过阅读source + git blame可以很容易地检查这些问题。