Python Matplotlib';s symlog(又称对称对数)刻度?

Python Matplotlib';s symlog(又称对称对数)刻度?,python,matplotlib,plot,scale,logarithm,Python,Matplotlib,Plot,Scale,Logarithm,这不是一个真正的编程问题。而是一个历史的 我想知道Matplotlib的 或“对称对数”刻度: 这是Matplotlib的发明吗 有人在另一个绘图工具中看到过类似的功能吗? 数学课本? 其他地方 为了完整性,由于文档有点简短: 本质上,symlog给出了低于某个阈值的线性刻度和高于该阈值的对数刻度。这允许绘制范围广泛的数字(如对数刻度),包括负数和零(这在传统对数刻度中是不可能的) 这里有一些例子和例子 正如@Paul所建议的,我继续询问Matplotlib实现的细节。他“没有发明这个

这不是一个真正的编程问题。而是一个历史的


我想知道Matplotlib的 或“对称对数”刻度:

  • 这是Matplotlib的发明吗
  • 有人在另一个绘图工具中看到过类似的功能吗? 数学课本? 其他地方

为了完整性,由于文档有点简短:

本质上,symlog给出了低于某个阈值的线性刻度和高于该阈值的对数刻度。这允许绘制范围广泛的数字(如对数刻度),包括负数和零(这在传统对数刻度中是不可能的)

这里有一些例子和例子


正如@Paul所建议的,我继续询问Matplotlib实现的细节。他“没有发明这个概念”,但“相信它是根据用户请求实现的”。不过,他在Matplotlib邮件列表中找不到参考资料

有人能指出这样一种说法吗?这可能非常有见地。

1)你必须要问,谁似乎是相关类的作者(根据git的指责),这是

2) 对称缩放


Matplotlib有一个github,并且已经在版本控制下有一段时间了,因此这些问题可以通过阅读source+git来轻松检查。

这更像是一个扩展注释。要在所有实数上连续地(或者更好地,平滑地)扩展对数,自然要在一个小的正值处停止、移动和反射。也就是说,使用<代码> 1 >代码>要小,考虑函数<代码>日志(x+1)< /> > <代码>×<代码>非负代码和<代码> -log(-x + 1)< />代码>代码> x<代码>非正。我使用演示示例图(没有
linthreshy
修改)将其与下面的
symlog
比例进行了比较

但事实并非如此,从稍微陡峭的第一排和第二排左侧图中可以明显看出。这可以通过将对数的对称性从
x=1
x=-1
移近零来修改,例如
x=.1
x=-.1
。此外,区域
[-linthresh,linthresh]
是线性的,这在右侧图中不是这种情况。下面是一个函数,它生成所描述的
matplotlib
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
(没有
symlog
type scale())中通过查找用于创建它的函数来尝试实现这一点。

在浏览web以获得相同的答案时,我找到了实现相同函数的MatLab包

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

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


我认为可以合理地假设这是标尺的原始来源。

我不想知道Matplotlib实现的作者以前是否在其他地方见过它,而是想知道是否有人以前在其他地方见过它。按照你的逻辑,每个提出关于X的问题的人都应该提到发明X的人,而不是任何知道答案的人。然而,问他显然是最有效的方法,特别是因为这门课已经很老了(2007年),但他仍然在。是的,当然。我的观点是:这种(非)答案总是“有效”。想象一下,你把它一字不差地贴到了我链接到的关于symlog的另一个问题上。我继续问他。他“没有发明这个概念”,但“相信它是根据用户请求实现的”。不过,他在Matplotlib邮件列表中找不到参考资料。我想这意味着我的问题仍然存在。。。(尽管投了反对票)你介意对此发表评论吗?我想,这至少会使你的投票无效。我按照你的建议找到了答案,但没有找到答案。如果不是这样的话,你会怎么调查呢?人们以前很有可能见过这种绘图方法?正如你在序言中所说的,很遗憾,这并没有回答我的问题,而是一个延伸的评论。我基本上是在寻找symlog最初的发明地。由于各自matplotlib代码的作者说不是他发明的,所以肯定还有其他人!总之,在最后一句话中,您是否暗示您正在寻找matplotlib中用于计算符号日志的代码?如果是,它就在这里:希望有帮助!谢谢,我一直在找。上面我想说的是,
symlog
的实现方式是非常自然的,因此要求它的“发明者”可能很困难,而且离题(我提到的反射和移动的概念在链接代码中是相同的,还有一些更精细的缩放)。也就是说,在我看来,这些代码行的作者当然是一个发明家——但我们可以合理地期望任何其他被要求实现对称对数的人(并且不知道这位作者的工作)也能给出同样的答案,因此也可以被视为发明家。这很公平。我同意这是自然的,但并不明显。我仍然认为一些旧的数学或数据分析教科书,甚至像高斯、欧拉、牛顿等会提到这个把戏。伟大的发现!我还找到了参考资料:从摘要上看,它听起来像是原作。不过,它不是开放存取的,所以我目前无法检查实际的纸张。