簡體   English   中英

Matplotlib 的符號對數(又名對稱對數)比例的起源是什么?

[英]What is the origin of Matplotlib's symlog (a.k.a. symmetrical log) scale?

這不是一個真正的編程問題。 而是一個歷史...


我想知道 Matplotlib 的符號對數或“對稱對數”比例:

  • 它是 Matplotlib 的發明嗎?
  • 有沒有人在另一個繪圖工具中看到過類似的功能? 數學課本? 在別處?

為了完整性,並且由於文檔有點短:

本質上, symlog給出了低於某個閾值的線性標度和高於某個閾值的對數標度。 這允許繪制范圍廣泛的數字(如對數刻度),包括負數和零(傳統的對數刻度不可能)。

這里這里有一些例子。


正如@保羅的建議,我繼續問了原作者的Matplotlib實施。 他“沒有發明這個概念”,但“相信它是根據用戶請求實現的”。 但是,他在 Matplotlib 郵件列表中找不到參考。

任何人都可以指出這樣的參考嗎? 它可能非常有見地。

在瀏覽網頁尋找相同的答案時,我發現了這個實現相同功能的 MatLab 包。

在其描述中,報告了以下內容:

SYMLOG 將修改后的對數刻度應用於處理負值的指定或當前軸,同時保持跨零的連續性。 測量科學與技術雜志 (Webber, 2012) 上的一篇文章定義了這種轉換

我認為假設這是規模的原始來源是合理的。

這更像是一個擴展評論。 為了在所有實數上連續(或更好地,平滑地)擴展對數,很自然地停止在一個小的正值、移動和反映。 也就是說,取1為小,考慮函數log(x+1)表示x非負和-log(-x+1)表示x非正。 我已經使用演示示例圖(沒有linthreshy修改)將其與下面的symlog尺度進行了linthreshy

在此處輸入圖片說明

但這並不完全是這樣,這在稍微陡峭的第一行和第二行左側圖中很明顯。 這可以通過將對稱性從對數的x=1x=-1移近零來修改,例如x=.1x=-.1 此外,區域[-linthresh, linthresh]是線性的,右側圖中的情況並非如此。 這是一個函數,它生成matplotlibsymlog描述近似值,以及一些可供選擇的選項。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM