[英]What is the origin of Matplotlib's symlog (a.k.a. symmetrical log) scale?
這不是一個真正的編程問題。 而是一個歷史...
我想知道 Matplotlib 的符號對數或“對稱對數”比例:
為了完整性,並且由於文檔有點短:
本質上, symlog給出了低於某個閾值的線性標度和高於某個閾值的對數標度。 這允許繪制范圍廣泛的數字(如對數刻度),包括負數和零(傳統的對數刻度不可能)。
正如@保羅的建議,我繼續問了原作者的Matplotlib實施。 他“沒有發明這個概念”,但“相信它是根據用戶請求實現的”。 但是,他在 Matplotlib 郵件列表中找不到參考。
任何人都可以指出這樣的參考嗎? 它可能非常有見地。
在瀏覽網頁尋找相同的答案時,我發現了這個實現相同功能的 MatLab 包。
在其描述中,報告了以下內容:
SYMLOG 將修改后的對數刻度應用於處理負值的指定或當前軸,同時保持跨零的連續性。 測量科學與技術雜志 (Webber, 2012) 上的一篇文章定義了這種轉換
我認為假設這是規模的原始來源是合理的。
這更像是一個擴展評論。 為了在所有實數上連續(或更好地,平滑地)擴展對數,很自然地停止在一個小的正值、移動和反映。 也就是說,取1
為小,考慮函數log(x+1)
表示x
非負和-log(-x+1)
表示x
非正。 我已經使用演示示例圖(沒有linthreshy
修改)將其與下面的symlog
尺度進行了linthreshy
。
但這並不完全是這樣,這在稍微陡峭的第一行和第二行左側圖中很明顯。 這可以通過將對稱性從對數的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
類型比例(問題是開放的)。
1)您必須詢問mdboom ,他似乎創作了相關課程(根據 git blame ),這是
2) SymmetricalLogScale。
Matplotlib 有一個github,並且已經有一段時間的版本控制,所以這些問題通過閱讀源碼+ git blame 很容易檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.