这不是一个编程问题。而是一个历史性的...
我想知道Matplotlib的symlog 或“对称日志”比例:
为了完整性,并且文档有点偏短:
实质上, symlog 给出一个线性比例低于某个阈值和上面的对数比例。这允许绘制大范围的数字(如对数刻度),包括负数和零(这对于传统的对数刻度是不可能的)。
正如@Paul所建议的那样,我继续向Matplotlib实施original author询问。他“没有发明这个概念”,但“相信它是在用户请求上实现的”。但是,他在Matplotlib邮件列表中找不到引用。
有人能指出这样的参考吗?这可能非常有见地。
答案 0 :(得分:2)
浏览网络时,我发现this MatLab包实现了相同的功能。
在其描述中,报告了以下内容:
SYMLOG将修改后的对数刻度应用于指定的或当前的 在保持连续性的同时处理负值的轴 零。 在期刊的一篇文章中定义了转换 测量科学与技术(Webber,2012)
我认为假设这是该量表的原始来源是合理的。
答案 1 :(得分:1)
这更多是扩展注释。要在所有实数上连续(或更好,更平滑)地扩展对数,自然会停在一个小的正值处,进行平移和反射。也就是说,假设1
较小,则对于log(x+1)
非负的函数x
和对于-log(-x+1)
非正数的x
。我已使用演示示例图(未经symlog
修改)将其与下面的linthreshy
比例进行了比较。
虽然不完全一样,但从第一排和第二排左侧图稍微陡峭就可以看出。可以通过将对称性从对数的x=1
和x=-1
移到更接近零的位置来进行修改,例如x=.1
和x=-.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可以很容易地检查这些问题。